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.Inmiddleware.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.Inmiddleware.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中定义