ejs中<%- message %>报错message is not defined

1、问题描述:最近在学习node.js,我把ejs引擎替换为html,在html中使用<%- message %>,然而它并没有接收到我的传值,并且报message is not defined。
2、代码如下:
app.js中:

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');


app.use(function(req,res,next){
res.locals.user = req.session.user;   // 从session 获取 user对象
var err = req.session.error;   //获取错误信息
delete req.session.error;
res.locals.message = "";   // 有错误信息展示err信息,没有则什么都不展示。
if(err){
    res.locals.message = '<div class="alert alert-danger" style="margin-bottom:20px;color:red;">'+err+'</div>';
}
next();  //中间件传递
});
router.route('/login').get(function (req, res) {

if (req.session.user) {
    res.redirect('/home');
}
res.render('login', {title: '用户登录'});
}).post(function (req, res) {

var user = {
    username: 'admin',
    password: '123456'
}
if (req.body.username === user.username) {
    req.session.user = user;
    res.redirect('/home');
} else {
    req.session.error = '用户名或密码不正确';
    res.redirect('/login');
}
});

学习阶段,代码很简单,模拟一个登陆,用户名输入不是admin的话, req.session.error = '用户名或密码不正确',传值给res.locals.message,然后传到页面。我是这样想的

有哪位前辈遇到过这种问题,html里面的<%- message%>为什么接收不到res.locals.message的值?

阅读 8.6k
3 个回答

你render到页面的代码在哪里?贴出来一起看一下

https://cnodejs.org/topic/540...里说写成locals.message
确实不报错了,但也读不出变量啊。
文章页传变量没问题,网站首页传user没问题,其他变量就总是报错undefined。
app.js里确实写了res.locals.user = req.session.user;

新手上路,请多包涵

你要把

app.use(function(req,res,next){
res.locals.user = req.session.user;   // 从session 获取 user对象
var err = req.session.error;   //获取错误信息
delete req.session.error;
res.locals.message = "";   // 有错误信息展示err信息,没有则什么都不展示。
if(err){
    res.locals.message = '<div class="alert alert-danger" style="margin-bottom:20px;color:red;">'+err+'</div>';
}
next();  //中间件传递
});

放到你跳转路由的上面就可以了

放到下面,发现路由先跳转就执行不到这里了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题