请教大侠有关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的值??
在您的问题中,您想要了解如何在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消息到视图中:
示例代码
-
安装
connect-flash
npm install connect-flash --save
-
配置中间件
在你的应用入口文件(例如
app.js
或server.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/'); });
-
在视图中显示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]
)。