我有一个客户端和一个用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);
答案 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;]