2

我有一个需要使用connect-flash的项目,我使用视图引擎作为 ejs。即使我配置一切都很好,在我看来,connect-flash 也不起作用。有人可以帮我解决这个问题吗?

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

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();
});

这是导出模块的get函数:

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><% } %>

如果有人会对此提供帮助,我将非常感激。我错过了什么吗?

4

3 回答 3

3

我假设您已经需要 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>
    <% } %>

希望这对您有所帮助。

于 2018-07-23T17:00:20.623 回答
3

这是另一个解决方案

//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>
<% } %>
于 2019-04-10T08:13:13.790 回答
2

您可以使用 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>
<% } %>
于 2020-03-09T17:59:11.993 回答