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');
}
});
});
在 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')
解释
-
中间件配置:
cookieParser()
:解析请求中的 cookie。session()
:设置会话中间件,用于存储会话数据。flash()
:设置闪现消息中间件。
-
登录处理:
- 当用户成功登录时,使用
req.flash('info', '登录成功!')
设置闪现消息,并重定向到主页。
- 当用户成功登录时,使用
-
显示消息:
- 在主页 (
/
) 上,通过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-flash
和 express-session
模块。你可以通过以下命令安装:
npm install express-session connect-flash
2. 在 app.js
中配置中间件
确保你在应用中正确地配置了 express-session
和 connect-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
来显示闪现消息。如果你还有其他问题,请检查你的依赖版本是否兼容,并确保所有中间件都已正确配置。