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


2 回复

当然可以。根据你提供的描述,你遇到的问题可能与connect-flash的使用方法有关。以下是解决这个问题的具体步骤和示例代码。

问题分析

  1. 确保使用正确版本的中间件:确保你使用的Express版本与connect-flash兼容。
  2. 配置顺序:确保在使用connect-flash之前已经配置了session和cookie-parser。
  3. 正确获取闪现消息:在模板中正确地获取并显示闪现消息。

示例代码

首先,确保你已经安装了所需的中间件:

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

关键点解释

  1. cookie-parser 和 session:必须先配置这两个中间件,以便connect-flash能够正常使用。
  2. req.flash:用于设置和获取闪现消息。
  3. Jade模板:通过检查messages数组是否为空来决定显示什么内容。

通过上述步骤和代码,你应该能够在Express应用中正确使用connect-flash。如果仍然有问题,请检查日志或浏览器控制台,看看是否有任何错误信息。


从你的描述来看,问题可能出在以下几个方面:

  1. Express版本:确保你使用的Express版本与connect-flash兼容。虽然connect-flash仍然可以用于现代版本的Express,但配置方式可能有所变化。
  2. 中间件顺序:确保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”。

希望这些信息能帮助你解决问题!

回到顶部