如何在express 4.x中使用connect-flash和ejs

时间:2018-04-18 18:23:52

标签: node.js ejs connect-flash

我有一个项目,我需要使用connect-flash,我使用视图引擎作为ejs。即使我配置一切都很好,在我看来,连接闪存不起作用。有人可以请我帮忙吗?

这里我如何定义会话,连接闪存和全局变量:

app.use(cookieParser());
//Express session middleware
app.use(session({
    secret: 'secret',
    resave: true,
    saveUninitialized: true
}));

//Connect flash middleware
app.use(flash());

//Global varibales
app.use(function (req, res, next) {
    res.locals.error = req.flash('error');
    res.locals.success = req.flash('success');
    next();
});

以下是导出模块获取功能:

module.exports.xxx_index_get = function(req, res) {
xxx.findOne({
    id: 'xxx'
}).then(xxx=> {
    req.flash('success', 'user succesfulyl registered')
    res.render('xxx/xxx', {
        xxx
    });
});};

以下是ejs文件:

<% if(success.length > 0) { %><div class="alert alert-success">
<%= success %>    </div><% } %>

如果有人会帮忙的话,我会非常感激。我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

我认为您已经需要了Flash的所有基本信息。

在您的路线中包含以下代码

module.exports.xxx_index_get = function(req, res) {
xxx.findOne({
    id: 'xxx'
}).then(xxx=> {
    req.flash('success', 'user succesfulyl registered')
res.locals.message = req.flash();
    res.render('xxx/xxx', {
        xxx
    });
});};

然后在您的视图中尝试使用类似这样的

<% if(locals.message){ %>
    <div class="alert alert-success" role="alert">
        <strong>Well done!</strong> <%=message.success%>
    </div>
    <% } %>

希望这对您有所帮助。

答案 1 :(得分:0)

这是另一种解决方案

//middlewares/flashMessage.js
exports.flashMessage = function (req, res, next) {
    const successFlashMessageArr = req.flash('success');
    const errorFlashMessageArr = req.flash('error');
    res.locals.successFlashMessage = successFlashMessageArr[0];
    res.locals.errorFlashMessage = errorFlashMessageArr[0];
    next();
}

在app.js中使用此中间件

const flashMessageMiddleware = require('./middlewares/flashMessage');
app.use(flashMessageMiddleware.flashMessage);

在EJS文件中,您可以使用全局变量

<% if(successFlashMessage){ %>
<div class="alert alert-success">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%=successFlashMessage%>
</div>
<% } %>

<% if(errorFlashMessage){ %>
<div class="alert alert-error">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%=errorFlashMessage%>
</div>
<% } %>

答案 2 :(得分:0)

您可以使用Daud Khan的示例,但是,在声明消息超出范围时,请使用<%- %>

显示消息

您的消息外观示例:

<% if(successFlashMessage){ %>
<div class="alert alert-success">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%- successFlashMessage %>
</div>
<% } %>

<% if(errorFlashMessage){ %>
<div class="alert alert-error">
    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
    <%- errorFlashMessage %>
</div>
<% } %>