我用nodejs写了一个演示网站。在文件app.js
中,我使用了express.session
案例1:
app.use(express.cookieParser())
app.use(express.session({ secret: "whatever" }));
//this code is working
案例2:
app.use(express.session({ secret: "whatever" }));
app.use(express.cookieParser());
//this is not correct
错误日志是:
Express
500 TypeError: Cannot read property 'connect.sid' of undefined
at Object.session [as handle] (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\middleware\session.js:239:32)
at next (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.favicon [as handle] (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\middleware\favicon.js:77:7)
at next (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.handle (D:\web\nodejs\Weibo\node_modules\express-partials\index.js:94:5)
at next (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.expressInit [as handle] (D:\web\nodejs\Weibo\node_modules\express\lib\middleware.js:30:5)
at next (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.query [as handle] (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\middleware\query.js:44:5)
at next (D:\web\nodejs\Weibo\node_modules\express\node_modules\connect\lib\proto.js:193:15)
答案 0 :(得分:1)
Express中的中间件订单,因为它们按您定义的顺序执行。在您的情况下,cookieParser
中间件会添加session
中间件使用的一些信息。
您可以查看connect's documentation:
但是,会话数据不会保存在cookie本身中 使用cookie,所以我们必须使用cookieParser() session()之前的中间件。