我再次跳进Sails.js并在我的应用程序中创建flash消息(用于错误,成功或警报)。我正在寻找一种很好的方法,found this discussion,我实施了他们建议的解决方案。
一般机制很有效,但是,只有在二次刷新之后或另一篇帖子之后才能看到flash消息。它首先在页面加载时不显示。以下是我如何构建所有内容并且我目前正在使用"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();
};
在我的api/services
中,我有FlashService.js
:
// 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)
在执行控制器之前正在读取您的消息(并且只有在读取消息后才设置消息)。您的视图中提供了req对象,您应该直接在视图中阅读req.session.messages [&#39; xxxx&#39;]。