📜  express-session 不推荐使用未定义的重新保存选项;提供重新保存选项 index.js:17:9 - Javascript (1)

📅  最后修改于: 2023-12-03 14:41:04.793000             🧑  作者: Mango

Express-Session: 不推荐使用未定义的重新保存选项;提供重新保存选项 index.js:17:9

Express-Session 是一个用于处理 session 的 Node.js 应用程序中间件。它为Express服务器提供会话支持,使得使用服务器上的会话变得非常容易。

在使用 Express-Session 时,建议不要使用未定义的重新保存选项,否则会提示上述警告信息。为了解决这个问题,Express-Session 提供了重新保存选项。

重新保存选项

重新保存选项是一种控制 session 如何在响应结束时被保存的选项。如果设置重新保存选项为 true,那么 session 会在响应结束时被自动保存。如果设置为 false,那么 session 不会在响应结束时被自动保存,而是需要手动调用 session.save() 来保存。

以下是使用重新保存选项的示例代码:

const express = require('express');
const session = require('express-session');
const app = express();

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

// 设置重新保存选项为 true
app.use((req, res, next) => {
    req.session.example = 'example';
    req.session.save(err => {
        if (err) {
            console.error(err);
        }
        next();
    });
});

app.get('/', (req, res) => {
    res.send(`Session example: ${req.session.example}`);
});

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

在上述示例代码中,我们通过 resave 选项设置重新保存为 true,随后在中间件中手动保存 session,保证了 session 在响应结束时被自动保存。

总结

在使用 Express-Session 时,如果不使用重新保存选项,且在 session 内容发生改变时没有手动调用 session.save(),那么 session 会在响应结束时被自动保存。但该行为并不总是正确的,因此,建议至少设置重新保存选项为 false,然后手动保存 session。

同时,在很多情况下,我们可能需要在将 session 保存到存储后,将其从内存中删除。为了实现这一点,可以在调用 session.save() 后,手动调用 session.destroy() 来销毁 session。