javascript - 以 Express 方式跨域传输 Cookie

标签 javascript node.js cookies express

我在 Node.js 中设置了一个代理,可以访问我们的后端服务器之一来获取数据;其中一些数据(例如 session ID)存储为 cookie。我想要做的是让代理获取远程 cookie,然后将其推送到原始请求的响应 header 中,然后将响应发回。我很接近,但遇到了障碍:

app.get(/\/json\/(.+)/, getJson);

var getJson = function(req, response1) {
    response1.setHeader('Content-Type', 'application/json; charset=utf-8');

    var before1stWrite = true;
    utils.setCookies(response1, ["floo=flum"])   // this works

    var options = {
        host : config.scraperUrl.replace('http://', ''),
        path : '/rwd/' + req.params[0] + '?' + querystring.stringify(req.query),
        method : "GET",
        rejectUnauthorized : false
    };

    var request = https.request(options, function(response2) {
        response2.setEncoding('utf8');
        // utils.setCookies(response1, ["flib=flah"])      // this fails, too

        response2.on('data', function(d) {
            if (before1stWrite) {
              console.log(response2.headers['set-cookie']);   // remote's cookies
              utils.setCookies(response1, ["flib=flah"])      // this fails
              before1stWrite = false;
            }
            response1.write(d);
        });

        response2.on('end', function() {
            response1.end()
        });
    });

    request.end();

    request.on('error', function(e) {
        console.error("error occurred: " + e.message);
        response1.end();
    });
}

setCookies(response1, cookies) 只是循环遍历 cookies 并执行 res.setHeader('Set-Cookie', cookie)

问题在于,在调用第二个 setCookies 时, header 似乎已被烘焙;将方法移至“数据”事件处理程序没有帮助。我得到的错误是:

http.js:689
    throw new Error('Can\'t set headers after they are sent.');

有什么方法可以将 header 添加到我从response2收到的response1吗?

<小时/>

更新

我修复了代码,以确保在任何其他写入之前尝试写入response1的 header ;然而,这并不是一个解决办法。

最佳答案

是的,数据开始流动后您无法发送 header 。您是否尝试在此行之后设置标题?

response.setEncoding('utf8');

此外,您是否考虑过使用流而不是分块传输? http://nodejs.org/api/stream.html

关于javascript - 以 Express 方式跨域传输 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25189681/

相关文章:

javascript - 如何使用 node.js 和 gm 创建 pdf 的缩略图

node.js - 使用 Mongoose 在过期日期后自动更新 mongo 文档

javascript - 附加 div block 并自动更改行

javascript - 从 Flask 远程服务器下载 React 客户端中的文件

javascript - 循环数组,但不是每个元素

javascript - 传单 - 如何自动删除以前的标记

vba - 如何在VBA中设置和获取JSESSIONID cookie?

c# - 将 CookieContainer 与 WebClient 类一起使用

security - 基本 cookie 和 CSRF 问题

javascript - Morris.js 中的周数不正确