express cookie 返回未定义

Posted

技术标签:

【中文标题】express cookie 返回未定义【英文标题】:express cookie return undefined 【发布时间】:2012-08-25 04:36:18 【问题描述】:

我正在尝试在 express.js 上设置 cookie,但它返回未定义。 我搜索了很多网页并将express.cookieParser() 放在app.use(app.router) 上方 但它仍然无法返回正确的值。

app.js

app.configure(function()
   var RedisStore = require('connect-redis')(express);
    app.use(express.logger());
    app.set('view options',  layout: false );
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser(uploadDir: './uploads/tmp'));
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session( secret: "william", store: new RedisStore ));
//Initialize Passport!  Also use passport.session() middleware, to support
//persistent login sessions (recommended).
    app.use(passport.initialize());
    app.use(passport.session());
    //app.router should be after passportjs
    app.use(app.router);
    app.use(express.compiler( src: __dirname + '/public', enable: ['less']));
    app.use(express.static(path.join(__dirname, 'public')));
);

app.get('/', function(req, res) 
    res.cookie('cart', 'test', maxAge: 900000, httpOnly: true)
);

app.get('/test', function(req, res) 
    res.send('testcookie: ' + req.cookies.cart);
);

结果:

testcookie: undefined

【问题讨论】:

【参考方案1】:

Cookie 在 HTTP 标头中设置。 res.cookie() 只是为您的 HTTP 结果设置标头,但实际上并不发送任何 HTTP。如果您的代码在语法上是正确的并且它运行了,那么它实际上只是坐着而不返回任何东西。我还在app.get() 中修复了您代码中的一些语法错误:

app.get('/', function(req, res) 
    res.cookie('cart', 'test', maxAge: 900000, httpOnly: true);
    res.send('Check your cookies. One should be in there now');
);

【讨论】:

【参考方案2】:

您需要在设置 cookie 后发送一些内容,或者至少致电res.end()。否则,res.cookie() 所做的只是将一些标头添加到稍后将发送出去的标头列表中。

【讨论】:

【参考方案3】:

将 cookie 名称设置为 value,其中可能是转换为 JSON 的字符串或对象。路径选项默认为“/”。

res.cookie('name', 'tobi',  domain: '.example.com', path: '/admin', secure: true );

这里是更多详细信息的链接

http://expressjs.com/api.html#res.cookie

【讨论】:

以上是关于express cookie 返回未定义的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Router() Express 函数返回未定义?

如何在 Vue 3 的 Vue Router 中获取 cookie?这个在 router/index.js 中未定义

Node.js + Express POST 请求返回未定义

res.session 未定义 graphql apollo-server-express

Express,第二次调用then()函数,用猫鼬保存对象后返回未定义对象

Nodejs 类返回未定义