node.js - 节点:res.locals 未定义?
问题描述
我正在尝试进行身份验证中间件以检查收到的令牌是否有效并使用 res.locals 传递用户数据,但是当我尝试访问 res.local 时出现给定的错误。
authmiddleware :检查令牌是否有效以及用户是否存在然后传递。
exports.authMiddleware = function (req, res, next) {
const token = req.headers.authorization;
if (token) {
const user = parseToken(token);
User.findById(user.userId, function (err, u) {
if (err) {
return res.status(422).send({
errors: normalizeErrors(err.errors)
});
}
if (u !== null) {
res.locals.user = u;
console.log(res.locals)
console.log(u)
next();
} else {
return notAuthorized(res);
}
})
} else {
return notAuthorized(res);
}
}
控制器从 re.locals 中提取用户,但错误是无法读取未定义的用户。
exports.changeAddress = function(req,res) {
const {user} = req.locals;
}
解决方案
locals
这是因为对象上没有调用字段req
。我假设changeAddress
是一个 POST 路由,并locals
作为 JSON 形式的 POST 请求正文从客户端发送。
如果是这种情况,您应该locals
像这样访问,
req.body.locals
请记住,由于请求正文是 JSON,因此您需要 express 才能正确解析它。
为此,您需要安装body-parser
中间件依赖项,
npm i body-parser
然后将此中间件添加到您的快速应用程序中,
const bodyParser = require('body-parser')
app.use(bodyParser.json())
参考:https ://expressjs.com/en/resources/middleware/body-parser.html
推荐阅读
- reactjs - ReactJS 为数组上的每个值渲染表
- angular - 如何更改角度4中输入类型=“日期”的输出日期格式?
- angular - 如何重命名角度应用程序?
- c# - 如何更改 ContentControl 中的 Content 属性
- php - 如何在矩阵表 PHP 中创建总计行
- oracle - 查找累计拥有 75% 积分的顶级用户
- android - NDK 中的“结构中的可变长度数组”错误
- python-3.x - 格式化文本文件中的数据
- r - 尝试从 R/Bioconductor 中的 GO ID 检索 Go 术语时出错
- gradle - 将变量从 Groovy 类传回 Gradle 任务