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


4 回复

当然可以!在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');
});

解释

  1. 安装依赖

    • express-session 用于管理会话。
    • cookie-parser 用于解析cookie。
  2. 配置中间件

    • cookieParser() 用于解析客户端发送的cookie。
    • session() 用于配置会话。secret 是用于签名session ID cookie的密钥。saveUninitializedresave 设置为 false 可以防止不必要的会话保存。
  3. 中间件处理

    • req.session 对象用于存储会话数据。在这个例子中,我们使用 req.session.views 来跟踪页面访问次数。
    • req.session.curruser 用于检查用户是否已登录。
  4. 渲染视图

    • 如果用户已登录(即 req.session.curruser 存在),则渲染登录成功的页面。
    • 否则,渲染登录页面。

通过这种方式,你可以确保在Express 4中正确地使用Session,并且避免了一些常见的陷阱。希望这能帮助你解决问题!


app.use(cookieParser(‘abc’));

传入参数

在Express 4中使用session与Express 3有所不同。Express 4分离了中间件,你需要单独安装cookie-parserexpress-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');
});

关键点解释

  1. secret - 这个密钥用于签名session ID的cookie。它必须是一个字符串或缓冲区。

  2. saveUninitialized - 设置为true表示即使没有修改session数据,也会保存session。如果设置为false,只有当session被修改后才会保存。

  3. resave - 设置为false表示即使session未被修改,也不会重新保存。这有助于提高性能。

  4. cookie - 配置session cookie。secure选项应该设置为true,如果你的应用使用HTTPS。

  5. 初始化session数据 - 在访问req.session.views之前检查是否已定义,如果没有则初始化为0。这样可以避免错误。

  6. 渲染模板 - res.render()方法根据视图名和传递的数据渲染页面。

通过这些更改,你应该能够在Express 4中正确使用session功能。

回到顶部