gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 13:17:24 27 4
gpt4 key购买 nike

我想将一些变量从第一个中间件传递给另一个中间件,我尝试这样做,但是出现“req.somevariable is a given as 'undefined'”。


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

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

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

最佳答案

v1 API docs

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

引用自文档:

An object that contains response local variables scoped to therequest, and therefore available only to the view(s) rendered duringthat request / response cycle (if any). Otherwise, this property isidentical to app.locals.

This property is useful for exposing request-level information such asthe request path name, authenticated user, user settings, and so on.

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();
});

v2 API docs

在 express 的第 2 版中,res.locals 已从 v1 中的字典样式对象更改为名为 res.local 的 getter/setter 函数和批量对象名为 res.locals 的 setter 函数。

按键设置局部变量:

res.local("user", { name: "Jim" });

按键获取局部变量:

const user = res.local("user");

console.log(user);
// { name: "Jim" }

一次批量设置所有本地响应状态:

const state = {
user: {
name: "Jim"
}
};

res.locals(state);

除了转向功能更强大的 API 之外,用例没有改变。

关于javascript - 在 Express.js 中使用 next() 将变量传递给下一个中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875292/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com