Javascript 如何将req.flash()用于EJS?
我希望能够通过Express和EJS向客户端快速发送消息。我已经找遍了,但仍然找不到示例或教程。有人能告诉我闪现信息的最简单方法吗 谢谢Javascript 如何将req.flash()用于EJS?,javascript,node.js,express,ejs,flash-message,Javascript,Node.js,Express,Ejs,Flash Message,我希望能够通过Express和EJS向客户端快速发送消息。我已经找遍了,但仍然找不到示例或教程。有人能告诉我闪现信息的最简单方法吗 谢谢 req.flash() <% if ( message ) { %> <div class="flash"><%= message %></div> <% } %> 如果你使用两个参数 req.flash(type, message); 如果type是一种消息类型,message是实际消息
req.flash()
<% if ( message ) { %>
<div class="flash"><%= message %></div>
<% } %>
如果你使用两个参数
req.flash(type, message);
如果type
是一种消息类型,message
是实际消息(两个字符串),则它将message
添加到type
类型的队列中。只使用一个参数
req.flash(type);
返回类型
的所有消息的数组,并清空队列。此外,此方法附加到会话,因此它在每个会话中都有效。换句话说,每个用户都有自己的闪存队列集。因此,在您看来,您可以这样做:
var messages = req.flash('info');
然后将messages
变量发送到模板,并在模板中使用它(注意messages
是一个数组,您可以迭代它)。记住使用req.flash('info','test')
将仅为当前用户(与req
对象关联)附加类型为info
的test
消息
请记住,这一机制相当薄弱。例如,如果用户双击链接(两个请求发送到服务器),那么他将看不到消息,因为第一次调用将清空队列(当然,除非请求生成消息)。如果使用visionmedia的express messages helper模块,它将变得非常简单
正如模块文档中所述:
使用npm安装模块
npm install express-messages
然后在app.config中为消息分配动态帮助程序:
app.dynamicHelpers({ messages: require('express-messages') });
在您的EJS文件中,将以下内容插入到您希望发送消息的位置
<%- messages() %>
我知道这是一个老生常谈的问题,但最近我自己在尝试理解flash消息和模板时遇到了这个问题,所以我希望这能帮助其他处于我这种情况的人。考虑到Express 4、Express flash模块和一个ejs模板的情况,这里有两条路线和一个模板可以帮助您入门
首先生成要显示的flash消息。这里的app.all()
方法映射到/express flash
。请求baseurl/express flash
在重定向到baseurl/
之前,使用req.flash(type,message)
setter方法创建消息
app.all('/express-flash', req, res ) {
req.flash('success', 'This is a flash message using the express-flash module.');
res.redirect(301, '/');
}
Next将消息映射到目标路由的res.render()
方法中的模板,baseurl/
。这里,req.flash(type)
getter方法返回与类型success
匹配的消息,这些消息映射到模板变量expressFlash
app.get('/', req, res ) {
res.render('index', {expressFlash: req.flash('success') });
}
最后,在index.ejs
中显示expressFlash
的值(如果存在)
<p> Express-Flash Demo </p>
<% if ( expressFlash.length > 0 ) { %>
<p>Message: <%= expressFlash %> </p>
<% } %>
Express Flash演示版
0 ) { %>
信息:
然后启动服务器并访问baseurl/express flash
。它应该会触发一个重定向到baseurl/
的flash消息。现在刷新baseurl/
,看到消息消失。我也在努力解决这个问题;让我的flash消息出现在我的.ejs中。
但是,我终于成功了,这就是我所理解的
一旦调用getterreq.flash(“\u msgName”)
,它就被清除了
另外,当您app.use(session());
cookie必须等于cookie:{maxAge:720}
,本质上是一个大数字
我使用console.log()测试getter,它显示在我的控制台中,但不显示在我的.ejs中
这是我的一些代码
Server.js~
app.get('/', function(req, res) {
// This is where we will retrieve the users from the database and include them in the view page we will be rendering.
User.find({},function(err, allUsers){
if(err){
console.log("Oh no we got an error\n ERROR :: "+err);
} else {
// console.log(allUsers);
res.render('index',{users : allUsers, msg : req.flash('vError')});
}
});
});
// Add User Request
app.post('/users', function(req, res) {
console.log("REQUESTED DATA:\t", req.body);
var user = new User(
{
name: req.body.name,
age: req.body.age
}
);
// Saves user to DB.
user.save(function(err) {
if(err) {
console.log('OOPS, Something went Wrong... \n ERROR :: '+err+'\n');
for(var key in err.errors){
// console.log(err.errors[key].message);
req.flash('vError', err.errors[key].message);
}
// **HERE I WAS ACCIDENTALLY CLEARING IT!!!** \\
// console.log(req.flash('vError'));
// res.render('index',{users : [], msg : req.flash('vError')});
res.redirect('/');
} else {
console.log('\tSuccessfully added a new User to the DB!');
res.redirect('/');
}
})
});
index.ejs~
<% if(msg.length > 0) { %>
<% for (var error in msg) { %>
<h3><%= msg[error] %></h3>
<% } %>
<% } %>
0){%>
这仍然没有告诉我如何在模板(EJS)中显示它。我已经知道req.flash()
如何工作。所以你不知道如何使用模板引擎?那你为什么问req.flash()
?这与flash
无关。你知道如何在EJS中传递和使用变量吗?我从来没有说过。我的意思是,如何在我的视图中显示它?是的,使用Express+EJS已经很久了。只是从来没有使用过flash消息。它确实与flash有关,我想知道如何在m中显示flash消息y视图。这与显示普通字符串数组有什么不同?我不知道,既然我不知道是什么变量,为什么不告诉我转到视图。如果我知道这一点,我就不会发布此问题。很抱歉对一篇旧帖子发表评论,但express messages现在仅适用于express 2.x。为了更完整的解释,它包括两种flash消息传递方法,一种单独使用express session模块,另一种使用express flash模块。它因此在ejs、车把和jade中包含了模板。感谢@Poison Oak after hours,我刚刚意识到我在中缺少了=
首选此链接,兄弟,易于理解
<p> Express-Flash Demo </p>
<% if ( expressFlash.length > 0 ) { %>
<p>Message: <%= expressFlash %> </p>
<% } %>
app.get('/', function(req, res) {
// This is where we will retrieve the users from the database and include them in the view page we will be rendering.
User.find({},function(err, allUsers){
if(err){
console.log("Oh no we got an error\n ERROR :: "+err);
} else {
// console.log(allUsers);
res.render('index',{users : allUsers, msg : req.flash('vError')});
}
});
});
// Add User Request
app.post('/users', function(req, res) {
console.log("REQUESTED DATA:\t", req.body);
var user = new User(
{
name: req.body.name,
age: req.body.age
}
);
// Saves user to DB.
user.save(function(err) {
if(err) {
console.log('OOPS, Something went Wrong... \n ERROR :: '+err+'\n');
for(var key in err.errors){
// console.log(err.errors[key].message);
req.flash('vError', err.errors[key].message);
}
// **HERE I WAS ACCIDENTALLY CLEARING IT!!!** \\
// console.log(req.flash('vError'));
// res.render('index',{users : [], msg : req.flash('vError')});
res.redirect('/');
} else {
console.log('\tSuccessfully added a new User to the DB!');
res.redirect('/');
}
})
});
<% if(msg.length > 0) { %>
<% for (var error in msg) { %>
<h3><%= msg[error] %></h3>
<% } %>
<% } %>