我正在尝试验证控制器中的值,并将闪存错误消息发送到Sailsjs Framework中的EJS视图文件。
我收到以下错误消息:
if(flash && flash.err) { >> flash is not defined in ejs file.
我在config / policies.js
中添加了flash策略'*': 'flash',
这就是我重定向到错误视图的方式..
var usernamePasswordRequiredError = [{ name: 'usernamePasswordRequired', message: 'You must enter both a username and password.' }] req.session.flash = { err: usernamePasswordRequiredError } res.redirect("/user/loginpage"); return;
Flash.js内容
Policy File: module.exports = function(req, res, next) { res.locals.flash = {}; if(!req.session.flash) return next(); res.locals.flash = _.clone(req.session.flash); req.session.flash = {}; next(); };
帮助我解决视图文件中的 Flash未定义错误。
答案 0 :(得分:3)
Sails.js有connect-flash
烤好的,所以我正在使用它:
在服务器上,设置:
req.flash('info', 'OHai');
在客户端上,获取:
res.req.flash('info');
这意味着我不必乱用_.clone()
或那个大的要点,如果你做了多个req.flash('info', '...');
调用,当你在它上面检索它时,你得到一个包含所有值的数组。客户端。当然,您也可以使用您想要的任何标签(不仅仅是“信息”)。
如果您需要更多详细信息,请与我们联系。
答案 1 :(得分:1)
使用irlnathan's screencast中建议的flash
政策,应定义res.locals.flash
对象,至少等于{}
,因此Express不应抛出您获得的错误。
但政策仅适用于控制器,而不仅仅适用于视图。
您确定sails是否从控制器提供ejs
视图,而不是来自主config/routes.js
配置文件?
答案 2 :(得分:0)
你的代码看起来非常接近我看到的要点,我喜欢这种方法比你的更多。它在精神上是一样的,但是在策略中会出现闪存错误和通知消息的设置。