表达不通过中间件传递req.params

时间:2012-11-15 20:24:30

标签: express middleware

this类似

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

使用req.params.link返回链接参数 当我在req.params.link中要求middleware.loginCheck时,我收到undefined

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

我的中间件问题是什么?

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

{#post.link}仅渲染变量替换,并且不会添加额外的/ a(href='/post#{post.link}') #{comments}呈现'/ postmyPostLink'

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

因此,#{post.link}post.link的工作方式相同,而req.params.link同时适用于两个来电。

UPDATE_2
我正在使用jade来呈现网页。在里面我有一个锚标记,如下所示:a(href='/post/#{post.link}) #{comments}
achor标签工作正常,并将我引导到正确的页面。但express不喜欢这种表述。相反,如果我将锚标记更改为a(href='/post/' + post.link) #{comments} req.params.link,则可以正常工作。

UPDATE_1
req.param('link')适用于此案例 中间件没有问题 但为什么req.params.link不起作用?

3 个答案:

答案 0 :(得分:2)

好的,我们在评论中来回了一下,但现在我的猜测是你的网址中的问题是双斜线

a(href='/post/#{post.link}') #{comments}

那是A)错过了一个结束语,但我认为这是你问题中的一个错字,而不是你的代码。和B)真正的问题是post.link包含一个前导斜杠,所以你最终得到这个HTML:

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

因此express将其解析为空:link参数。将你的玉改为:

a(href='/post#{post.link}') #{comments}

你应该重新开始营业。

答案 1 :(得分:0)

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 );

答案 2 :(得分:-1)

middleware.loginCheck的签名是什么样的?它需要返回function(req, res, next)