expressjs未通过中间件传递req.params

expressjs未通过中间件传递req.params,express,middleware,Express,Middleware,近似 我有以下路线: app.get('/blogpost/:link',middleware.loginCheck,blog.postBlogs) 使用req.params.link返回链接参数。 当我在middleware.loginCheck中请求req.params.link时,我收到一个未定义的 似乎req.params.link没有被传递到中间件,因为我可以像这样访问它: app.get('/blogpost/:link',函数(req,res){console.log(req.pa

近似

我有以下路线:
app.get('/blogpost/:link',middleware.loginCheck,blog.postBlogs)

使用
req.params.link
返回链接参数。
当我在
middleware.loginCheck
中请求
req.params.link
时,我收到一个
未定义的

似乎
req.params.link
没有被传递到中间件,因为我可以像这样访问它:
app.get('/blogpost/:link',函数(req,res){console.log(req.params.link)})

我的中间件有什么问题

最终版
a(href='/post/{post.link}'){comments}
呈现
/post/myPostLink

{#post.link}
仅呈现变量替换,不添加额外的
/

a(href='/post{post.link}'){comments}
呈现'/postypostlink'

a(href='/post/'+post.link)#{comments}
呈现
/post/myPostLink

因此,这两个
{post.link}
post.link
的工作原理相同,
req.params.link
对这两个调用都有效

更新_2
我正在使用
jade
呈现网页。在里面我有一个锚定标记,写的是:
a(href='/post/{post.link}){comments}

achor标签可以很好地引导我进入正确的页面。但是
express
不喜欢这种表示。相反,如果我将锚点标记更改为
a(href='/post/'+post.link)#{comments}
req.params.link
可以正常工作

更新\u 1
req.param('link')
适用于这种情况。
中间件没有问题。

但是为什么
req.params.link
不起作用呢?

中间件.loginCheck的签名是什么样的?它需要返回一个
函数(req,res,next)

中间件的签名是什么样的?它需要返回一个
函数(req,res,next)

好的,我们在注释中来回查看了一下,但现在我猜问题是URL中的双斜杠

a(href='/post/#{post.link}') #{comments}
这是一个)缺少一个结束引用,但我认为这是一个打字错误,只是在你的问题在这里,而不是在你的代码。而B)真正的问题是
post.link
包含一个前导斜杠,因此您最终得到以下HTML:

<a href='/post//post_link_name'>42</a>

你应该重新开始工作。

好的,我们在评论中来回讨论了一下,但现在我猜问题是你的URL中出现了双斜杠

a(href='/post/#{post.link}') #{comments}
这是一个)缺少一个结束引用,但我认为这是一个打字错误,只是在你的问题在这里,而不是在你的代码。而B)真正的问题是
post.link
包含一个前导斜杠,因此您最终得到以下HTML:

<a href='/post//post_link_name'>42</a>
您应该重新开始工作。

在最新版本的express中,您可以使用
路由器.param()
作为您的中间件,专门处理
请求.params

var router = express.Router();

router.param( "nickname", function (req, res, next, nickname) {

    console.log( "nickname: ", nickname );
    next();
});

router.get( "/user/:nickname", myController.method );
在最新版本的express中,您可以使用
router.param()
作为中间件专门处理
req.params

var router = express.Router();

router.param( "nickname", function (req, res, next, nickname) {

    console.log( "nickname: ", nickname );
    next();
});

router.get( "/user/:nickname", myController.method );

您可以发布中间件的相关代码吗?在您发布的代码片段中,我没有看到任何明显的错误。可以是
middleware.loginCheck
中的
req.params.link
中的输入错误。另外,您是否在请求中的多个位置传递名为“link”的参数,例如查询字符串或请求正文?如果是这样,可以在
req.params('link')
中获取数据,但不能在
req.params.link
中获取数据,因为
req.params
只是URL/route参数,而
req.param('link')
检查URL参数,然后检查body,然后查询string.In
middleware.loginCheck
中没有对
req.params.link
的引用。我唯一一次调用
req.params.link
是在
blog.postBlogs
中。我只需要通过
req.params.link
。我认为我没有传递一个名为“link”的参数。有一个
,其中
name\u of_post
req.params.link
。因此,当用户单击锚定标记时,它会显示在URL中,然后会弹出
req.params.link
?您可以发布中间件的相关代码吗?在您发布的代码片段中,我没有看到任何明显的错误。可以是
middleware.loginCheck
中的
req.params.link
中的输入错误。另外,您是否在请求中的多个位置传递名为“link”的参数,例如查询字符串或请求正文?如果是这样,可以在
req.params('link')
中获取数据,但不能在
req.params.link
中获取数据,因为
req.params
只是URL/route参数,而
req.param('link')
检查URL参数,然后检查body,然后查询string.In
middleware.loginCheck
中没有对
req.params.link
的引用。我唯一一次调用
req.params.link
是在
blog.postBlogs
中。我只需要通过
req.params.link
。我认为我没有传递一个名为“link”的参数。有一个
,其中
name\u of_post
req.params.link
。因此,当用户单击锚定标记时,它会显示在URL中,然后
req.params.link
会弹出吗?它会弹出。我不发布中间件的原因是因为它非常混乱。但它确实具有
功能(req、res、next)
应该与您所展示的功能配合使用。另一方面,它将只在您的a
/blogpost/:link
routeIt中定义。我不发布中间件的原因是因为它非常混乱。但它确实具有
功能(req、res、next)
应该与您所展示的功能配合使用。另一方面,它将只在您的a
/blogpost/:link
rou中定义