Nodejs 求指导:Express中connect-flash的使用?
Nodejs 求指导:Express中connect-flash的使用?
我根据connect-flash在GitHub上的地址关于Express3.x部分的提示,书写代码如下,并且我也 npm install connect-flash安装了相关module,然后我在相关的jade模版中做了以下判断: if(typeof flash == ‘undefined’) p nothing 最后,我通过/flash访问该页面,最后显示出nothing,即jade模版中没有得到flash! 为什么呢?是因为Connect-flash在最新的Express版本中不可用了么?
var flash = require(‘connect-flash’); var app = express();
app.configure(function() { app.use(express.cookieParser(‘keyboard cat’)); app.use(express.session({ cookie: { maxAge: 60000 }})); app.use(flash()); });
app.get(’/flash’, function(req, res){ // Set a flash message by passing the key, followed by the value, to req.flash(). req.flash(‘info’, ‘Flash is back!’) res.redirect(’/’); });
app.get(’/’, function(req, res){ // Get an array of flash messages by passing the key to req.flash() res.render(‘index’, { messages: req.flash(‘info’) }); });
当然可以。根据你提供的描述,你遇到的问题可能与connect-flash
的使用方法有关。以下是解决这个问题的具体步骤和示例代码。
问题分析
- 确保使用正确版本的中间件:确保你使用的Express版本与
connect-flash
兼容。 - 配置顺序:确保在使用
connect-flash
之前已经配置了session和cookie-parser。 - 正确获取闪现消息:在模板中正确地获取并显示闪现消息。
示例代码
首先,确保你已经安装了所需的中间件:
npm install express cookie-parser session connect-flash
接下来,编写你的Express应用代码:
const express = require('express');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const flash = require('connect-flash');
const app = express();
// 使用cookie-parser
app.use(cookieParser('keyboard cat'));
// 使用express-session
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
cookie: { maxAge: 60000 }
}));
// 使用connect-flash
app.use(flash());
// 设置模板引擎为Jade
app.set('view engine', 'jade');
// 设置闪现消息
app.get('/flash', (req, res) => {
req.flash('info', 'Flash is back!');
res.redirect('/');
});
// 获取并渲染闪现消息
app.get('/', (req, res) => {
res.render('index', { messages: req.flash('info') });
});
// 启动服务器
app.listen(3000, () => {
console.log('Server running on port 3000');
});
Jade模板示例
确保你在Jade模板中正确地获取并显示闪现消息:
doctype html
html
head
title Flash Example
body
if messages && messages.length > 0
ul
each message in messages
li= message
else
p nothing
关键点解释
- cookie-parser 和 session:必须先配置这两个中间件,以便
connect-flash
能够正常使用。 - req.flash:用于设置和获取闪现消息。
- Jade模板:通过检查
messages
数组是否为空来决定显示什么内容。
通过上述步骤和代码,你应该能够在Express应用中正确使用connect-flash
。如果仍然有问题,请检查日志或浏览器控制台,看看是否有任何错误信息。
从你的描述来看,问题可能出在以下几个方面:
- Express版本:确保你使用的Express版本与
connect-flash
兼容。虽然connect-flash
仍然可以用于现代版本的Express,但配置方式可能有所变化。 - 中间件顺序:确保
connect-flash
在任何需要访问session数据的中间件之前被调用。
以下是更新后的代码示例,使用Express 4.x的推荐方式:
const express = require('express');
const session = require('express-session');
const flash = require('connect-flash');
const app = express();
// 配置中间件
app.use(express.urlencoded({ extended: false })); // 解析表单数据
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true,
}));
app.use(flash());
// 设置闪现消息
app.get('/flash', (req, res) => {
req.flash('info', 'Flash is back!');
res.redirect('/');
});
// 显示闪现消息
app.get('/', (req, res) => {
res.render('index', { messages: req.flash('info') });
});
// 启动服务器
const port = process.env.PORT || 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
关于Jade模板
确保你在Jade模板中正确地显示闪现消息。例如:
doctype html
html
head
title= title
body
if messages && messages.length
each msg in messages
p!= msg
else
p nothing
这样,当存在闪现消息时,它们会显示出来;如果不存在,则显示“nothing”。
希望这些信息能帮助你解决问题!