Express.js中app.locals显示undefined的技术问题求助
问题解决:app.locals 访问时显示 undefined 的原因及修复方案
你这里的问题核心是混淆了app.locals的正确访问路径——Express里并没有req.locals这个属性,所以调用时自然会返回undefined。
关键原因说明
在Express的设计里:
app.locals是挂载在应用实例上的全局变量,所有请求周期都能访问,但必须通过req.app.locals(或res.app.locals)来获取,req对象本身并不直接拥有locals属性。- 如果你是想在单个请求周期内设置局部变量,会用到
res.locals,但你是在server.js里全局配置的app.locals,所以得用对应全局属性的访问方式。
修正后的代码
把你的中间件代码调整成这样:
function getDetails(req,res,next){ contract = req.app.locals.SampleContract; web3 = req.app.locals.web3; contractAddress = req.app.locals.contractAddress; // 注意:你这里的contractAddress似乎没在server.js的app.locals中设置,记得补充配置哦 next(); }
额外补充知识点
app.locals里的变量会在整个应用生命周期内持续存在,非常适合存放全局通用的配置、工具实例(比如你这里的web3、合约对象)等。- 如果后续需要在模板渲染中使用这些变量,Express会自动合并
app.locals和res.locals的内容,模板里可以直接访问,无需手动传递。
内容的提问来源于stack exchange,提问作者Jithin Zacharia
相关产品推荐
相关产品推荐

