未定义的消息变量 NodeJS
Undefined message variable NodeJS
我一直在按照本教程为我的节点应用程序实施身份验证:https://scotch.io/tutorials/easy-node-authentication-setup-and-local
我遇到的问题是 运行 应用程序出现此错误:(我的代码完全符合上述网站的要求)。
我尝试寻找答案,但我能得到的最好结果是将此函数添加到我的服务器代码中:
app.use(function(req, res, next){
res.locals.message = req.flash();
next();
});
这加载应用程序没有任何错误,但是,消息似乎没有显示在我的前端。不确定为什么,但我只在这个项目中遇到这个问题,我可以在我的其他项目中毫无问题地实现消息。
我在下面添加了我的 github link 但这里是我的代码:
routes.js
app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/dashboard',
failureRedirect : '/#contact',
failureFlash : true
}));
passport.js
if (user) {
return done(null, false, req.flash('signupMessage', 'Email already in use!'));
}
index.ejs
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Github 项目:https://github.coventry.ac.uk/salmanfazal01/304CEM-Back-End
根据错误,我认为您没有将变量 message
正确传递给 ejs
视图。
所以你有 2 个解决方案
1- 在您的 routes.js
文件中,您需要在呈现 index
视图时传递消息,这就是您所遵循的示例的完成方式。
所以改变
//GET homepage
app.get('/', function(req, res) {
res.render('index');
});
到
//GET homepage
app.get('/', function(req, res) {
res.render('index' , {message: <your data> });
});
2- 使用 res.locals
和 res.flash
这是您找到的解决方案,但您实际上并没有在 req.flash()
中传递任何值
所以替换这段代码
app.use(function(req, res, next){
res.locals.message = req.flash();
next();
});
和
app.use(function(req, res, next){
req.flash("info" , "first message"); //here you add message under type info
req.flash("info" , "second message"); // here you add another message under type info
next();
});
在你的route.js
app.get('/', function(req, res) {
res.render('index' , {message : req.flash("info")}); //set message from req.flash type info
});
//or
app.get('/', function(req, res) {
res.locals.message = req.flash("info"); //set locals.message from req.flash type info
res.render('index');
});
我一直在按照本教程为我的节点应用程序实施身份验证:https://scotch.io/tutorials/easy-node-authentication-setup-and-local
我遇到的问题是 运行 应用程序出现此错误:(我的代码完全符合上述网站的要求)。
我尝试寻找答案,但我能得到的最好结果是将此函数添加到我的服务器代码中:
app.use(function(req, res, next){
res.locals.message = req.flash();
next();
});
这加载应用程序没有任何错误,但是,消息似乎没有显示在我的前端。不确定为什么,但我只在这个项目中遇到这个问题,我可以在我的其他项目中毫无问题地实现消息。
我在下面添加了我的 github link 但这里是我的代码:
routes.js
app.post('/signup', passport.authenticate('local-signup', {
successRedirect : '/dashboard',
failureRedirect : '/#contact',
failureFlash : true
}));
passport.js
if (user) {
return done(null, false, req.flash('signupMessage', 'Email already in use!'));
}
index.ejs
<% if (message.length > 0) { %>
<div class="alert alert-danger"><%= message %></div>
<% } %>
Github 项目:https://github.coventry.ac.uk/salmanfazal01/304CEM-Back-End
根据错误,我认为您没有将变量 message
正确传递给 ejs
视图。
所以你有 2 个解决方案
1- 在您的 routes.js
文件中,您需要在呈现 index
视图时传递消息,这就是您所遵循的示例的完成方式。
所以改变
//GET homepage
app.get('/', function(req, res) {
res.render('index');
});
到
//GET homepage
app.get('/', function(req, res) {
res.render('index' , {message: <your data> });
});
2- 使用 res.locals
和 res.flash
这是您找到的解决方案,但您实际上并没有在 req.flash()
所以替换这段代码
app.use(function(req, res, next){
res.locals.message = req.flash();
next();
});
和
app.use(function(req, res, next){
req.flash("info" , "first message"); //here you add message under type info
req.flash("info" , "second message"); // here you add another message under type info
next();
});
在你的route.js
app.get('/', function(req, res) {
res.render('index' , {message : req.flash("info")}); //set message from req.flash type info
});
//or
app.get('/', function(req, res) {
res.locals.message = req.flash("info"); //set locals.message from req.flash type info
res.render('index');
});