Nodejs中怎么在ejs中访问res.locals.XXX的值
Nodejs中怎么在ejs中访问res.locals.XXX的值
《Node.js开发指南》的微博实例中,
var success = req.flash('success');
res.locals.success = success;`
但是在layout.ejs中用locals.success却访问不到,请问是怎么回事?有什么办法能够访问的?
6 回复
没用过ejs, 不过目测是直接用success
直接 xxx 就好了。
<% locals.success %>
<%- xxx %>
在Node.js中使用EJS模板引擎时,res.locals
对象中的属性可以在EJS模板中直接访问。如果在layout.ejs
中无法访问locals.success
,可能是因为该属性没有正确设置或者模板渲染时没有传递正确的上下文。
以下是一些可能的原因及解决方案:
-
确保
res.locals
被正确设置: 确保在请求处理逻辑中正确设置了res.locals.success
。示例如下:app.get('/some-route', (req, res) => { req.flash('success', '操作成功!'); res.locals.success = req.flash('success'); res.render('index', { title: '首页' }); });
-
确保模板文件中正确引用了
locals.success
: 在EJS模板中直接使用locals.success
即可。示例如下:<!-- layout.ejs --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><%= title %></title> </head> <body> <h1><%= locals.success %></h1> </body> </html>
-
检查模板渲染顺序: 确保在调用
res.render
之前已经设置了res.locals
。如果在渲染之后再设置,则无效。 -
确保Flash插件已正确安装并使用: 如果使用了
connect-flash
或其他类似插件,确保已正确配置并使用。 -
检查视图引擎配置: 确保在Express应用中正确配置了EJS作为视图引擎。示例如下:
const express = require('express'); const app = express(); app.set('view engine', 'ejs'); app.set('views', './views'); // 其他中间件和路由配置
通过以上步骤,你应该能够在EJS模板中正确访问res.locals.success
的值。如果问题仍然存在,请检查是否有其他地方覆盖或修改了该属性。