在 Express 中使用 next() 将变量传递到下一个中间件.js

2022-08-30 00:11:58

我想将一些变量从第一个中间件传递到另一个中间件,我尝试这样做,但是有“是一个给定的'未定义'”。req.somevariable


//app.js
..
app.get('/someurl/', middleware1, middleware2)
...

////middleware1
...
some conditions
...
res.somevariable = variable1;
next();
...

////middleware2
...
some conditions
...
variable = req.somevariable;
...

答案 1

这就是 res.locals 对象的用途。不支持也不记录直接在请求对象上设置变量。res.locals 保证在请求的整个生命周期内保持状态。

res.locals(注意:这里引用的文档现在已经过时了,请查看最新版本的链接。

一个对象,它包含作用域为请求的响应局部变量,因此仅可用于在该请求/响应周期(如果有)期间呈现的视图。否则,此属性与 app.locals 相同。

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

app.use(function(req, res, next) {
    res.locals.user = req.user;  
    res.locals.authenticated = !req.user.anonymous;
    next();
});

在下一个中间件中检索变量:

app.use(function(req, res, next) {
    if (res.locals.authenticated) {
        console.log(res.locals.user.id);
    }
    next();
});

答案 2

将变量附加到对象,而不是 。reqres

而不是

res.somevariable = variable1;

有:

req.somevariable = variable1;

正如其他人所指出的,是通过中间件传递数据的推荐方式。res.locals