2012-11-15 36 views
1

类似thisexpressjs不及格req.params通过中间件

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

使用req.params.link返回链路参数。
当我要求req.params.linkmiddleware.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不工作?

+0

你能发布相关的代码中间件?我没有在您发布的代码片段中看到任何明显的错误。可能与'middleware.loginCheck'的'req.params.link'中的拼写错误一样简单。另外,您是否在请求中的多个位置传递了一个名为“link”的参数,例如查询字符串或请求正文?如果是这样,可以将数据返回到'req.params('link')'而不是'req.params.link'中,因为'req.params'只是URL /路由参数,而'req.param('link ')'检查URL参数,然后检查正文,然后查询字符串。 –

+0

在'middleware.loginCheck'中没有'req.params.link'的引用。我唯一一次称'req.params.link'在'blog.postBlogs'中。我只需要'req.params.link'就可以通过。我不认为我传递了一个名为'link'的参数。有一个''name_of_post'是'req.params.link'。所以当用户点击那个锚点标签时,它会显示在URL中,那么应该弹出'req.params.link'? – user1460015

+0

@PeterLyons检查update_2 – user1460015

回答

-1

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

+0

它的确如此。我不发布中间件的原因是因为它非常混乱。但它的功能(请求,水库,下一个)' – user1460015

+0

应该与你所显示的一样。只是另一个,它只会被定义在你的'/ blogpost /:link'路线 – chovy

2

OK,我们就来回在评论了一下,但现在我的猜测是,这个问题是在你的URL

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

也就是说A)缺少双斜杠结束报价,但我认为这只是在你的问题,而不是在你的代码中的错字。和B),真正的问题是,post.link包括斜线,所以你最终这个HTML:

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

这样表达的解析,作为一个空:link参数。改变你的玉:

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

你应该恢复业务。

+0

'#{post.link}'和'#{comments}'在html中正确呈现。也就是说,(href ='/ post /#{post.link}')#{comments}渲染'/ post/post_link_name'和'#{comments}'显示一个数字。我需要改变它,因为你有'a(href ='/ post'+ post.link')以便快递将它附加到'req.params.link'。 [看到这个](http://naltatis.github.com/jade-syntax-docs/#text) – user1460015

0

在最近版本的表达你可以使用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);