一尘不染

如何在Express 4.0中发送即时消息?

node.js

因此,我的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


阅读 247

收藏
2020-07-07

共1个答案

一尘不染

该要点应回答您的问题:

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']在屏幕上看到。

2020-07-07