首页 > 解决方案 > 节点: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;
}

标签: node.jsapijwt

解决方案


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


推荐阅读