2017-06-20 61 views
0

我想使用requestjs在多個javascript文件甚至多個服務器之間發出請求並共享cookie。 因此,我將cookies作爲字符串存儲在數據庫中,並在需要時檢索它們。通過字符串設置Cookie

的字符串看起來像它應該是符合tough-cookie

[{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key1","value":"val1","httpOnly":false,"hostOnly":true},{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key2","value":"val2","httpOnly":false,"hostOnly":true}] 

我怎樣才能得到requestjs使用這些cookie? tough-cookie對象有一個方法fromJSON(string),我想是我需要的。

所以按說我想我應該能夠做到

var cookies = '[{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key1","value":"val1","httpOnly":false,"hostOnly":true},{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key2","value":"val2","httpOnly":false,"hostOnly":true}]'; 

var j = request.jar(); 
j.fromJSON(cookies); 

request.get({ url: 'https:/url.com', jar : j}, 
function(error, response, body) { 
     console.log(body); 
}); 

但是這給了錯誤TypeError: j.fromJSON is not a function

我怎樣才能申請使用的cookie字符串從數據庫中提取?

回答

0

它可以直接訪問對象輸入Cookie,但我不知道這是不是最好的解決辦法:

TOUGH = require('tough-cookie'); 

var cookies = '[{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key1","value":"val1","httpOnly":false,"hostOnly":true},{"domain":"domain.com","path":"/","secure":true,"expires":"2018-06-19T15:36:04.000Z","key":"key2","value":"val2","httpOnly":false,"hostOnly":true}]'; 

var j = request.jar(); 
cookies = JSON.parse(cookies); 
for(i = 0; i < cookies.length; i++) { 
    var cookie = new TOUGH.Cookie(cookies[i]); 
     var domain = cookie.canonicalizedDomain(); 

     if (!j._jar.store.idx[domain]) { 
     j._jar.store.idx[domain] = {}; 
    } 
    if (!j._jar.store.idx[domain][cookie.path]) { 
     j._jar.store.idx[domain][cookie.path] = {}; 
    } 

j._jar.store.idx[domain][cookie.path][cookie.key] = cookie; 
} 

//this will use the set cookies 

request.get({ url: 'https:/url.com', jar : j}, 
function(error, response, body) { 
     console.log(body); 
});