nodeJS,使用http.request丢失会话

时间:2014-10-15 14:49:31

标签: node.js http session cookies

我正在使用nodeJS开发应用程序,在我的应用程序中登录后,我需要获取http请求,但我有302状态响应,并且我重定向到登录。 我想我需要用我的http请求发送cookie会话信息..这怎么可能?

这是我的代码:

var http = require('http');

    var options = {
        //host: "siadmigo.siadmiservice.com",
        host: "localhost",
        path: "/" + model + "/config/",
        port: '1337',
        withCredentials: true,
        method: 'GET'
    };

    var req = http.request(options, function(res) {

        console.log("Got response: " + res.statusCode);

        var body = '';
        res.on('data', function(chunk) {
            body += chunk;
        });
        res.on('end', function() {
            console.log(body);
            return callback(null, body);
        });

    }).on('error', function(e) {
        console.log("Got error: " + e.message);
        return callback(e, null);
    });

    req.end();

1 个答案:

答案 0 :(得分:0)

当您开始需要内置http模块未提供的功能时(例如,处理重定向和记住Cookie),您可以考虑使用request。除了设置npm install tough-cookie之外,您还需要jar: true,如下所示:

var request = require('request');

// ...

// _request() will maintain a cookie jar across multiple calls to _request()
var _request = request.defaults({jar: true});
_request('http://localhost:1337/' + model + '/config/' , function(err, res, body) {
  callback(err, body);
});

或使用单独的Cookie jar而不是单独的request()并设置默认值:

var request = require('request');

// ...

var jar = request.jar();
request({
  url: 'http://localhost:1337/' + model + '/config/',
  jar: jar
}, function(err, res, body) {
  callback(err, body);
});

与第二种解决方案的权衡是,您可以将jar对象传递给其他request()实例,无论它们的默认值是什么。但是,您还必须为要使用这些Cookie的每个jar手动指定request()