因此,我的Web应用程序需要身份验证,并且我有一个注册页面,如果该人员尝试使用数据库中已经存在的电子邮件进行注册,我想向他们显示错误消息。我正在尝试在html端使用以下代码执行此操作:
<% if (message.length > 0) { %> <div class="alert alert-danger"><%= message %></div> <% } %>
并在我的路线中执行以下操作:
router.get('/signup', function(req, res) { res.render('/signup', { message: req.flash('signupMessage') }); });
我已经尝试通过以下方式设置配置:
app.configure(function() { app.use(express.session({ secret : 'keyboard cat' })); });
但这给了我一个TypeError:
12:11:38 web.1 | app.configure(function() { 12:11:38 web.1 | ^ 12:11:38 web.1 | TypeError: Object function (req, res, next) {
我真的很困惑,因为我知道我需要会话才能使Flash正常工作,但是会话似乎对我来说并不起作用。我还尝试通过使用req.session.messages仅使用会话而不使用Flash,但是由于我没有会话在工作,因此这显然不起作用。
有什么见解吗?我正在使用Express 4.0.0
该要点应回答您的问题:
https://gist.github.com/raddeus/11061808
在您的应用程序安装文件中:
app.use(flash());
在设置会话和cookie解析器之后,将其正确放置。这实际上是使用Flash所需要的。
您正在使用:
req.flash('signupMessage', anyValue);
重定向到/ signup之前,对吗?
这是我目前用于个人网站的一个有趣的小花絮(在我的主应用程序文件中):
app.use(function(req, res, next){ res.locals.success_messages = req.flash('success_messages'); res.locals.error_messages = req.flash('error_messages'); next(); });
现在,每个视图都可以访问您刷新的任何错误或成功消息。对我来说效果很好。
最后一件事(这很挑剔,但您可能会学到一些知识)。如果您更改:
<% if (message.length > 0) { %>
至:
<% if (message) { %>
它将以相同的方式工作,但是如果未定义消息,则不会失败。在javascript中,未定义和空字符串均被视为“虚假”值。
编辑:我的cookie /会话/ flash设置如下:
app.use(cookieParser('secretString')); app.use(session({cookie: { maxAge: 60000 }})); app.use(flash());
也许看到您的应用程序设置代码会有所帮助。另请注意,在Express 4中不再需要使用app.configure。
最终编辑:https : //gist.github.com/raddeus/11061808
那是一个可行的例子。运行该应用程序后转到localhost:3000,您应该会['it worked']在屏幕上看到。
['it worked']