1

此类似

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

使用req.params.link返回链接参数。
当我要求req.params.linkin 时,middleware.loginCheck我收到一个undefined.

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

我的中间件有什么问题?

最终
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}
工作正常并将我引导到正确的页面。但express不喜欢这种表示。相反,如果我将锚标记更改为a(href='/post/' + post.link) #{comments} req.params.link可以正常工作。

UPDATE_1
req.param('link')适用于这种情况。
中间件没有问题。
但为什么req.params.link行不通?

4

3 回答 3

2

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

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}

你应该重新开始工作。

于 2012-11-15T23:08:27.130 回答
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 );
于 2015-05-31T08:40:45.463 回答
-1

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

于 2012-11-15T22:56:07.893 回答