请教大侠有关Nodejs视图传参数的问题 flash

请教大侠有关Nodejs视图传参数的问题 flash

	app.get(’/’,function(req,res){
req.flash(‘error’,‘用户已经注册’);
console.log(’–’+req.flash(‘error’));
res.render(‘index’, { title: ‘首页’});
});

app.use(function(req, res, next){ //res.locals.title = config[‘title’] //res.locals.csrf = req.session ? req.session._csrf : ‘’; res.locals.user = app.get(‘user’); console.log(req.flash(‘error’)); res.locals.error = req.flash(‘error’).length ? req.flash(‘error’) : null ; res.locals.success = req.flash(‘success’).length ? req.flash(‘success’) : null ; next(); });//locals

日志:$ node app Express server listening on port 3000 [] –用户已经注册 GET / 304 561ms [] [] [] []

为什么在视图助手里面无法获取到error的值??


3 回复

在您的问题中,您想要了解如何在Node.js应用中通过视图传递参数,并且遇到了flash消息在视图中无法正确显示的问题。让我们详细分析一下这个问题,并提供一个示例来解决它。

分析问题

在您的代码中,您使用了req.flash()方法来存储错误信息,并希望在视图中显示这些信息。然而,您发现这些信息并没有被正确地传递到视图中。

解决方案

首先,确保您已经安装了connect-flash库,因为它是用来处理闪现消息的。如果没有安装,可以通过以下命令安装:

npm install connect-flash --save

接下来,我们需要确保在中间件配置中正确设置了flash,并且在渲染视图时将这些消息传递给视图。

示例代码

配置中间件

确保在您的应用启动时正确配置了flash中间件。通常,这应该在解析请求体之前进行配置:

const express = require('express');
const session = require('express-session');
const flash = require('connect-flash');

const app = express();

// 设置session中间件
app.use(session({
    secret: 'your_secret_key',
    resave: false,
    saveUninitialized: true
}));

// 使用flash中间件
app.use(flash());

// 设置全局变量
app.use((req, res, next) => {
    res.locals.error = req.flash('error');
    res.locals.success = req.flash('success');
    next();
});

处理路由

当需要设置闪现消息时,使用req.flash方法:

app.get('/', (req, res) => {
    req.flash('error', '用户已经注册');
    res.render('index', { title: '首页' });
});

视图模板

在您的EJS模板(或其他模板引擎)中,您可以这样访问闪现消息:

<% if (error && error.length) { %>
    <div class="alert alert-danger">
        <%= error.join('<br>') %>
    </div>
<% } %>

<% if (success && success.length) { %>
    <div class="alert alert-success">
        <%= success.join('<br>') %>
    </div>
<% } %>

总结

通过上述步骤,您应该能够正确地在视图中显示闪现的消息。关键点在于确保flash中间件被正确配置,并且在中间件中将闪现消息传递给视图的局部变量。


求解,也遇到这个问题!

从你的描述来看,问题可能出在Flash消息的使用方式上。req.flash()方法主要用于Express.js中的会话管理,用于存储临时消息,如错误信息或成功信息。如果你希望在视图中正确地传递这些Flash消息,需要确保在渲染视图之前设置它们,并且在中间件中正确地提取它们。

首先,确保你已经安装了connect-flash库来支持Flash消息的功能:

npm install connect-flash --save

然后,在你的应用中正确配置并使用它。这里有一个简化的示例,展示了如何设置和传递Flash消息到视图中:

示例代码

  1. 安装connect-flash

    npm install connect-flash --save
    
  2. 配置中间件

    在你的应用入口文件(例如app.jsserver.js)中添加以下代码:

    const express = require('express');
    const session = require('express-session');
    const flash = require('connect-flash');
    
    const app = express();
    
    // 配置session
    app.use(session({
        secret: 'your_secret_key',
        resave: false,
        saveUninitialized: true
    }));
    
    // 使用flash插件
    app.use(flash());
    
    // 设置错误或成功消息
    app.get('/set-error', function(req, res) {
        req.flash('error', '用户已经注册');
        res.redirect('/');
    });
    
    // 中间件来处理Flash消息
    app.use(function(req, res, next) {
        res.locals.error = req.flash('error');
        res.locals.success = req.flash('success');
        next();
    });
    
    // 渲染带有Flash消息的视图
    app.get('/', function(req, res) {
        res.render('index', { title: '首页' });
    });
    
    // 启动服务器
    app.listen(3000, () => {
        console.log('Server running at http://localhost:3000/');
    });
    
  3. 在视图中显示Flash消息

    在你的index.ejs视图文件中,你可以这样访问和显示这些Flash消息:

    <!DOCTYPE html>
    <html>
    <head>
        <title><%= title %></title>
    </head>
    <body>
        <% if (error && error.length) { %>
            <div style="color: red;"><%= error[0] %></div>
        <% } %>
    
        <% if (success && success.length) { %>
            <div style="color: green;"><%= success[0] %></div>
        <% } %>
    </body>
    </html>
    

通过这种方式,你可以确保在视图中正确显示Flash消息。注意,Flash消息是数组形式的,因此在视图中需要访问第一个元素(error[0]success[0])。

回到顶部