Javascript 用next传递响应主体

Javascript 用next传递响应主体,javascript,express,Javascript,Express,我对JavaScript非常陌生,所以我仍在努力解决问题。在应用程序中,我们使用jwt检查令牌是否有效。为此,使用教程和我自己的一些实验创建了以下函数: 功能已授权(请求、恢复、下一步){ const bearerHeader=req.header['authorization'] if(bearerHeader的类型!=“未定义”){ let token=bearerHeader.split(“”)[1] 让privateKey='secretkey' verify(令牌,私钥,{algori

我对JavaScript非常陌生,所以我仍在努力解决问题。在应用程序中,我们使用
jwt
检查令牌是否有效。为此,使用教程和我自己的一些实验创建了以下函数:

功能已授权(请求、恢复、下一步){
const bearerHeader=req.header['authorization']
if(bearerHeader的类型!=“未定义”){
let token=bearerHeader.split(“”)[1]
让privateKey='secretkey'
verify(令牌,私钥,{algorithm:“HS256”},(err)=>{
如果(错误){
res.sendStatus(403)
}
否则{
下一个()
}
})
}
否则{
res.sendStatus(403)
}
}
然后,当我使用一些
json
负载执行
post
调用时,它将在以下函数中正确传递:

app.post('/api/posts',已授权,(请求,回复)=>{
res.json({
消息:“Post created”,
请求:req.body.username
})
})

唯一一件似乎不起作用的事情是如何查阅
post
调用发送的
body
中的
json
paybload。当然,中间件功能
必须经过授权
才能传递此数据。

您可以尝试多个选项来实现这一点

方法1: 使用,它保证在请求的生命周期内保持状态。 包含响应局部变量的对象,作用域为请求,因此仅对在该请求/响应周期(如果有)期间呈现的视图可用。否则,此属性与app.locals相同

此属性对于公开请求级信息(如请求路径名、经过身份验证的用户、用户设置等)非常有用


拯救

检索变量的步骤

app.use(function(req, res, next) {
 if (res.locals.authenticated) {
  console.log(res.locals.user.id);
 }
 next();
});
方法2: 将变量附加到req对象

req.username = username;
方法1是实现您期望的目标的最推荐的方法


希望这能对你有所帮助:)

你好,你能详细说明一下,你被困在哪里了?我想我知道答案,但不确定你要找的是什么。当然,如果我用有效的令牌拨打post电话到路线
/posts
,我可以毫无问题地到达该路线。但是如果
post
包含像
@{userName:'Bob'}
这样的json主体,我希望在
被授权后能够在函数中使用
userName
。似乎也很难识别它是哪个用户。因为该信息存储在令牌中。但是我似乎无法检索它。您不能在您的
isAuthorized
中间件的req.body中设置任何头,以帮助您检查实际路由处理程序中的确切用户。
req.username = username;