Nodejs中关于connect-flash的问题

Nodejs中关于connect-flash的问题

app.js

var flash = require('connect-flash');
app.use(flash());
app.post('/loginaction',function(req,res){
	var user = new User(req.body.user);
	user.save(function(err){
		if(!err){
			req.flash('info','flash!!save!!');
			res.redirect('/');
		}else{
			res.redirect('/login');
		}
	});
});

jade

  form(method = 'post' ,action='/loginaction')
    fieldset
      legend register a user
      div.clearfix
        label Login
          div.input
            input(name='user[name]',class='xlarge')
            input(name='user[pwd]',type='password',class='xlarge')
           
          div.actions
            input(type='submit',value='save',class='btn primary')
            input(type='reset',value='reset',class='btn primary')
            input(type='button',value='cancel',class='btn primary')
  script alert(typeof flash);
  script alert(flash.info);

0.学习阶段,我只想在登陆成功的时候告诉用户一下。。。顺便存到session中保存登陆信息

1.flash.info undefined 。。。请问各位大牛 问题出在哪? 2.node 3.X以后req.flash被req.session.messages = [‘foo’] ;替代,但是这玩意照着网上说的设置了

app.use(express.cookieParser());
app.use(express.session({
	secret : "hardwork!"
}));
app.use(express.session({ cookie: { maxAge: 60000 }}));

app.post('/loginaction',function(req,res){
	var user = new User(req.body.user);
	user.save(function(err){
		if(!err){
			req.session.messages = ['foo'] ; // jade页面上如何拿到呢?????
			res.redirect('/');
		}else{
			res.redirect('/login');
		}
	});
});

6 回复

在 Node.js 中使用 connect-flash 库可以在会话期间向用户显示临时消息。以下是解决您所提到的问题的详细步骤和代码示例。

1. 安装必要的库

首先确保安装了 express, connect-flash, 和 cookie-parser

npm install express connect-flash cookie-parser

2. 配置中间件

app.js 文件中配置这些中间件:

var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var flash = require('connect-flash');

var app = express();

// 使用中间件
app.use(cookieParser());
app.use(session({
    secret: 'hardwork!',
    resave: false,
    saveUninitialized: true,
    cookie: { maxAge: 60000 }
}));
app.use(flash());

// 登录处理
app.post('/loginaction', function (req, res) {
    var user = new User(req.body.user);
    user.save(function (err) {
        if (!err) {
            req.flash('info', '登录成功!');
            res.redirect('/');
        } else {
            res.redirect('/login');
        }
    });
});

// 显示消息
app.get('/', function (req, res) {
    res.render('index', { messages: req.flash('info') });
});

app.listen(3000, function () {
    console.log("Server running on port 3000");
});

3. 修改 Jade 模板

在 Jade 模板中显示消息:

doctype html
html
  head
    title Flash Message Example
  body
    h1 Flash Message Example
    if messages.length > 0
      ul
        each msg in messages
          li= msg
    form(method='post', action='/loginaction')
      fieldset
        legend Register a user
        div.clearfix
          label Login
          div.input
            input(name='user[name]', class='xlarge')
            input(name='user[pwd]', type='password', class='xlarge')
          div.actions
            input(type='submit', value='Save', class='btn primary')
            input(type='reset', value='Reset', class='btn primary')
            input(type='button', value='Cancel', class='btn primary')

解释

  1. 中间件配置

    • cookieParser():解析请求中的 cookie。
    • session():设置会话中间件,用于存储会话数据。
    • flash():设置闪现消息中间件。
  2. 登录处理

    • 当用户成功登录时,使用 req.flash('info', '登录成功!') 设置闪现消息,并重定向到主页。
  3. 显示消息

    • 在主页 (/) 上,通过 res.render('index', { messages: req.flash('info') }) 将闪现消息传递给视图。
    • 在 Jade 模板中,检查 messages 数组是否为空,如果不为空,则显示消息列表。

这样就可以在用户登录成功后,向他们显示一条临时的消息。


0.0 昨天我也遇到这问题了,擦

jade 上如何拿到? 按我个人的想法,是不是可以做个 middleware 弄个名为 flash 的 helper 来拿到?

jade不是会渲染成html嘛。。我想问的是。。怎么读取session?有木有官方的方法或者比较规范的方法,求推荐一下

1.flash.info undefined 。。。 肯定是你没有把flash的内容传到jade。在express里,你需要手动把所有jade需要的信息通过res.render传给你的模板(jade)

2.node 3.X以后req.flash被req.session.messages = [‘foo’] ;替代,但是这玩意照着网上说的设置了 node没有3.X,你说的是express吧。照着网上说的就行了。不会错的。这玩意没什么复杂的。

根据你的描述,你在使用 connect-flash 模块时遇到了一些问题。以下是一些可能的原因及解决方案:

1. connect-flash 的正确使用方式

首先,你需要确保你已经安装了 connect-flashexpress-session 模块。你可以通过以下命令安装:

npm install express-session connect-flash

2. 在 app.js 中配置中间件

确保你在应用中正确地配置了 express-sessionconnect-flash 中间件:

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

const app = express();

app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true,
}));

app.use(flash());

app.post('/loginaction', function(req, res) {
  const user = new User(req.body.user);
  user.save(function(err) {
    if (!err) {
      req.flash('success', '登录成功!');
      res.redirect('/');
    } else {
      req.flash('error', '登录失败,请重试。');
      res.redirect('/login');
    }
  });
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

3. 在 Jade 模板中显示闪现消息

在 Jade 模板中,你可以这样来获取并显示闪现消息:

doctype html
html
  head
    title Flash Message Example
  body
    h1 #{title}
    if req.flash('success').length > 0
      div.alert.alert-success
        ul
          each msg in req.flash('success')
            li= msg
    if req.flash('error').length > 0
      div.alert.alert-error
        ul
          each msg in req.flash('error')
            li= msg

    form(method='post', action='/loginaction')
      fieldset
        legend 登录一个用户
        div.clearfix
          label Login
            div.input
              input(name='user[name]', class='xlarge')
              input(name='user[pwd]', type='password', class='xlarge')
          div.actions
            input(type='submit', value='保存', class='btn primary')
            input(type='reset', value='重置', class='btn primary')
            input(type='button', value='取消', class='btn primary')

4. 注意事项

  • 确保你已经在客户端启用了 Jade 模板引擎。
  • 请注意,Jade 模板引擎现在已经更名为 Pug,但仍然可以正常工作。

总结

通过以上步骤,你应该能够正确地在 Node.js 应用中使用 connect-flash 来显示闪现消息。如果你还有其他问题,请检查你的依赖版本是否兼容,并确保所有中间件都已正确配置。

回到顶部