无法使用NodeJS中的请求和表达模块在浏览器中设置cookie

时间:2016-03-16 12:16:33

标签: node.js express cookies browser

我有一个客户端和一个用express编写的服务器节点。客户端使用请求模块与服务器通信,服务器将响应发送回客户端。在服务器代码中,我将cookie发送回客户端。但我无法在浏览器中看到cookie。在客户端req.cookies正在给{}

服务器代码:

var express = require('express');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/test-cookie', function(req, res) {
    res.cookie('abc', 'xyz').send('Cookie is set');
});
app.listen(9000);

客户代码:

var express = require('express');
var request = require('request');
var cookieParser = require('cookie-parser');
var app = express();
app.use(cookieParser());
app.get('/', function(req, res) {
    request({
        url: 'http://localhost:9000/test-cookie',
        method: 'GET'
    }, function(error, response, body) {
        if (error) {
            res.send({
                msg: error
            });
        } else {
            if (200 == response.statusCode) {
                console.log(req.cookies);
            }
        }
    });
});
app.listen(7000);

2 个答案:

答案 0 :(得分:1)

首次点击7000 api的客户端浏览器不会包含任何Cookie,因此req.cookies会记录{},因此我们必须在res中设置Cookie客户端浏览器发送其余请求的cookie。

解决方案(客户端代码):

if (200 == response.statusCode) {

    // For first request it will be empty {}
    console.log(req.cookies);

    /* fetching the cookie from the response header
     * and setting in res to be set in the browser
     */
    var c = response.headers['set-cookie'];
    res.set('set-cookie',c[0]);

    res.send('Done');

}

<强>解释: 你正在做的是尝试从req获取不包含任何cookie的cookie。您从点击response api获得的9000对象将包含cookie。因此,您必须为客户端浏览器将Cookie从response设置为res

答案 1 :(得分:0)

response.cookies是设置cookie,如果你想从响应对象中获取cookie,你将不得不依赖于response.headers [&#39; set-cookie&#39;]