无法使用请求在浏览器中设置Cookie,并在NodeJS中表示模块
我有一个客户端和服务器节点快速写入。 客户端使用请求模块与服务器进行通信,服务器会将响应发送回客户端。 在服务器代码中,我将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);
客户端浏览器首次打到7000
api将不会包含任何cookie,因此req.cookies
将会logging{}
,因此我们必须在res
设置cookie以供客户端浏览器发送其余请求的cookie。
解决scheme (客户端代码):
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。 您从9000
api获得的response
对象将包含cookie。 因此,您必须将cookie设置为response
客户端浏览器的res
。
response.cookies是设置cookie,如果你想从响应对象获取cookie,你将不得不依赖于response.headers ['set-cookie']