Javascript 闪光信息不';在刷新或第二次发布之前不显示?
我再次跳入Sails.js,并在整个应用程序中创建flash消息(错误、成功或警报)。我正在寻找一个好的方法来实现它,我实现了他们建议的解决方案 一般的机制工作得很好,但是,flash消息只有在二次刷新或另一次发布后才能看到。页面加载时,它最初不会显示。以下是我对所有内容的结构化方式,我正在使用Javascript 闪光信息不';在刷新或第二次发布之前不显示?,javascript,node.js,express,sails.js,Javascript,Node.js,Express,Sails.js,我再次跳入Sails.js,并在整个应用程序中创建flash消息(错误、成功或警报)。我正在寻找一个好的方法来实现它,我实现了他们建议的解决方案 一般的机制工作得很好,但是,flash消息只有在二次刷新或另一次发布后才能看到。页面加载时,它最初不会显示。以下是我对所有内容的结构化方式,我正在使用“sails”:“~0.10.0-rc7”当前: 在我的api/policies文件夹中,我有flash.js: // flash.js policy module.exports = function(
“sails”:“~0.10.0-rc7”
当前:
在我的api/policies
文件夹中,我有flash.js
:
// flash.js policy
module.exports = function(req, res, next) {
res.locals.messages = {
success: [],
error: [],
warning: []
};
if(!req.session.messages) {
req.session.messages = { success: [], error: [], warning: [] };
return next();
}
res.locals.messages = _.clone(req.session.messages);
// Clear flash
req.session.messages = { success: [], error: [], warning: [] };
return next();
};
// FlashService.js
module.exports = {
success: function(req, message) {
req.session.messages['success'].push(message);
},
warning: function(req, message) {
req.session.messages['warning'].push(message);
},
error: function(req, message) {
req.session.messages['error'].push(message);
}
}
在我的api/services
中,我有FlashService.js
:
// flash.js policy
module.exports = function(req, res, next) {
res.locals.messages = {
success: [],
error: [],
warning: []
};
if(!req.session.messages) {
req.session.messages = { success: [], error: [], warning: [] };
return next();
}
res.locals.messages = _.clone(req.session.messages);
// Clear flash
req.session.messages = { success: [], error: [], warning: [] };
return next();
};
// FlashService.js
module.exports = {
success: function(req, message) {
req.session.messages['success'].push(message);
},
warning: function(req, message) {
req.session.messages['warning'].push(message);
},
error: function(req, message) {
req.session.messages['error'].push(message);
}
}
我的config/policies.js
也配置了flash
策略:
// config/policies.js
module.exports.policies = {
'*': [true, 'flash'],
'UserController': {
'join': ['flash'],
},
};
现在,在所有这些设置中,我如何使用它的示例出现在我的UserController
中,用于我的join
操作:
module.exports = {
join: function(req, res) {
// If username, email, and password compare come back true: create user.
if(newUser.username && newUser.email && newUser.password == newUser.confirmPassword) {
// Logic to create user.
res.view();
// If not, then report an issue.
} else {
FlashService.error(req, 'There was an issue.');
res.view();
};
}
};
最后,我的观点与我链接的讨论完全相同。我在这方面使用了EJS
:
<% if (messages && messages['error'].length > 0) { %>
<div class="alert alert-danger">
<% messages['error'].forEach(function(message) { %>
<%= message %>
<br>
<% }); %>
</div>
<br>
<% } %>
<% if (messages && messages['warning'].length > 0) { %>
<div class="alert alert-warning">
<% messages['warning'].forEach(function(message) { %>
<%= message %>
<br>
<% }); %>
</div>
<br>
<% } %>
<% if (messages && messages['success'].length > 0) { %>
<div class="alert alert-success">
<% messages['success'].forEach(function(message) { %>
<%= message %>
<br>
<% }); %>
</div>
<br>
<% } %>
0){%>
0) { %>
0) { %>
我会做错什么?任何帮助都将不胜感激
谢谢,您的消息在控制器执行命令之前被读取(读取后只设置消息)。req对象在您的视图中可用,您应该直接将req.session.messages['xxxx']读取到您的视图中