无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie
Posted
技术标签:
【中文标题】无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie【英文标题】:Unable to set cookie in browser using request and express modules in NodeJS 【发布时间】:2016-07-02 07:39:37 【问题描述】:我有一个用 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);
【问题讨论】:
【参考方案1】:response.cookies 是 SET cookie,如果你想从响应对象获取 cookie,你将不得不依赖 response.headers['set-cookie']
【讨论】:
【参考方案2】:客户端浏览器首次访问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');
说明:
您正在做的是尝试从不包含任何 cookie 的 req
获取 cookie。您通过点击9000
api 获得的response
对象将包含cookie。因此,对于客户端浏览器,您必须将 cookie 从 response
设置为 res
。
【讨论】:
以上是关于无法使用 NodeJS 中的 request 和 express 模块在浏览器中设置 cookie的主要内容,如果未能解决你的问题,请参考以下文章
nodejs使用request和bluebird编写的http请求模块
如何使用nodejs和request将不同请求的响应放在同一个文档中?