2015-11-03 55 views
0

Im刮一個網站,需要認證。我使用node.js並請求一個jar來存儲cookie。node.js cookie與request.jar

我的問題: 我得到了兩條路線/登錄和/ api,當我登錄到網站時,我將cookie存儲在登錄路徑/文件中,然後如何在/ api中使用同一個cookie?

 login.js: 

     var request = require('request'); 
     var jar = request.jar(); 

     var payload = querystring.stringify({ 
      username: username, 
      password: password, 
      request_token: token, 
     }); 

     var options = { 
      .. 
      .. 
      method: 'POST', 
      body: payload, 
      jar: jar <---------- Valid cookie 
     }; 

     request(options, function (error, response, body) { 
      // Code here 
     }); 


     -------------------------------- 

     api.js: 

     var request = require('request'); 
     var jar = request.jar(); 

      var options = { 
      method: "get", 
      url: baseUrl, 
      jar: jar <-------- Not sat anymore 
     }; 


     request(options, function (error, response, body) { 

      if (error) { 
       res.send(error); 
       return; 
      } 

回答

2

您可以創建一個新模塊並集中該方法。在這裏我創建了一個模塊jar.js,該模塊導出了允許設置/獲取罐子的函數。

您的原始代碼現在只需要爲這種新方法付出代價。在每個文件中我添加了這一行var jar = require('./jar');

jar.js: 

var request = require('request'); 
var jar; 

module.exports = function getJar() { 
    if(jar) 
    return jar; 
    else { 
    jar = request.jar(); 
    return jar; 
    } 
} 

module.exports = function setJar(jarParam) { 
    jar = jarParam; 
} 

-------------------------------- 
    login.js: 

    var jar = require('./jar'); 
    var request = require('request'); 
    jar.setJar(request.jar()); 

    var payload = querystring.stringify({ 
     username: username, 
     password: password, 
     request_token: token, 
    }); 

    var options = { 
     .. 
     .. 
     method: 'POST', 
     body: payload, 
     jar: jar.getJar() <---------- Valid cookie, from jar module 
    }; 

    request(options, function (error, response, body) { 
     // Code here 
    }); 


    -------------------------------- 

    api.js: 

    var request = require('request'); 
    var jar = require('./jar'); 

     var options = { 
     method: "get", 
     url: baseUrl, 
     jar: jar.getJar() <---------- Valid cookie, from jar module 
    }; 
+0

表示感謝! – spitfire511