Nodejs express4 session 不会用。以前用过express3 很不错。换了新就不行。粘出代码
Nodejs express4 session 不会用。以前用过express3 很不错。换了新就不行。粘出代码
app.use(cookieParser()); app.use(session({
keys: [‘key1’, ‘key2’],
secureProxy: true }));
app.use(function(req,res,next){ var again = req.query.again||false;
var n = req.session.views || 0
req.session.views = ++n
***console.log(n); // n 值永远是1 ***
if(req.session.curruser){
res.render(‘login/loginsuccess’,{loginname:loginname,password:password});
}
else{
res.render(‘login/login’,{again:again});
};
})
app.listen(3000);
当然可以!在Express 4中使用Session可能会遇到一些变化,特别是在配置方面。以下是一个示例代码,展示了如何在Express 4中正确配置和使用Session。
示例代码
首先,确保你已经安装了必要的依赖包:
npm install express express-session cookie-parser
然后,在你的应用文件(例如 app.js
)中添加以下代码:
const express = require('express');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const app = express();
// 使用 cookie-parser 中间件
app.use(cookieParser());
// 配置 session 中间件
app.use(session({
secret: 'your_secret_key', // 用于签名session ID cookie的密钥
resave: false, // 强制将未修改的会话保存回存储器
saveUninitialized: false, // 创建未初始化的会话
cookie: {
secure: false // 如果为true,则仅通过HTTPS传输cookie
}
}));
// 定义一个中间件来处理session
app.use(function(req, res, next) {
var again = req.query.again || false;
// 检查是否存在views属性,如果不存在则初始化为0
var n = req.session.views || 0;
req.session.views = ++n;
console.log(n); // 输出当前的 views 数量
if (req.session.curruser) {
res.render('login/loginsuccess', { loginname: req.session.loginname, password: req.session.password });
} else {
res.render('login/login', { again: again });
}
});
// 启动服务器
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
安装依赖:
express-session
用于管理会话。cookie-parser
用于解析cookie。
-
配置中间件:
cookieParser()
用于解析客户端发送的cookie。session()
用于配置会话。secret
是用于签名session ID cookie的密钥。saveUninitialized
和resave
设置为false
可以防止不必要的会话保存。
-
中间件处理:
req.session
对象用于存储会话数据。在这个例子中,我们使用req.session.views
来跟踪页面访问次数。req.session.curruser
用于检查用户是否已登录。
-
渲染视图:
- 如果用户已登录(即
req.session.curruser
存在),则渲染登录成功的页面。 - 否则,渲染登录页面。
- 如果用户已登录(即
通过这种方式,你可以确保在Express 4中正确地使用Session,并且避免了一些常见的陷阱。希望这能帮助你解决问题!
app.use(cookieParser(‘abc’));
传入参数
在Express 4中使用session与Express 3有所不同。Express 4分离了中间件,你需要单独安装cookie-parser
和express-session
。
安装依赖
首先确保已经安装了以下依赖:
npm install express cookie-parser express-session
示例代码
const express = require('express');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const app = express();
// 使用cookie-parser中间件
app.use(cookieParser());
// 使用express-session中间件
app.use(session({
secret: 'your_secret_key', // 用于加密session ID的密钥
resave: false,
saveUninitialized: true,
cookie: { secure: false } // 如果你的应用使用HTTPS, 可以设置为true
}));
app.use(function(req, res, next) {
var again = req.query.again || false;
// 检查是否有views属性,如果没有初始化为0
if (!req.session.views) {
req.session.views = 0;
}
req.session.views++;
console.log(req.session.views); // 应该显示递增的值
if (req.session.curruser) {
res.render('login/loginsuccess', { loginname: req.session.curruser.name, password: req.session.curruser.password });
} else {
res.render('login/login', { again: again });
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
关键点解释
-
secret
- 这个密钥用于签名session ID的cookie。它必须是一个字符串或缓冲区。 -
saveUninitialized
- 设置为true
表示即使没有修改session数据,也会保存session。如果设置为false
,只有当session被修改后才会保存。 -
resave
- 设置为false
表示即使session未被修改,也不会重新保存。这有助于提高性能。 -
cookie
- 配置session cookie。secure
选项应该设置为true
,如果你的应用使用HTTPS。 -
初始化session数据 - 在访问
req.session.views
之前检查是否已定义,如果没有则初始化为0。这样可以避免错误。 -
渲染模板 -
res.render()
方法根据视图名和传递的数据渲染页面。
通过这些更改,你应该能够在Express 4中正确使用session功能。