2017-08-03 93 views
0

因此,我在我的網站上託管了一個node.js文件,並且我試圖通過cookie獲取數據。 我正在使用editmycookie,我可以看到cookie已設置。Node.js Cookies不起作用

我有獲取餅乾從名字

function parseCookies(request, finding){ 
    rc = request.headers.cookie + ';'; 
    rc && rc.split(';').forEach(function(cookie) { 
     var parts = cookie.split('='); 
     if(parts.shift().trim() == finding){ 
      return decodeURI(parts.join('=')).replace(/-/g, '='); 
     } 

    }); 
} 

然後我跑這一點,知道的cookie功能被設置

app.get('/', function(req, res){ 
    user = parseCookies(req, 'user'); 
    pass = parseCookies(req, 'pass'); 
    console.log(user + pass); 

而且記錄爲NaN的

我米仍然在學習節點,對不起。

我在Ubuntu 16.04是否有幫助!\

古怪的是,它爲我的網站上一些用戶,對有些沒有。我沒有注意到他們的工作模式和誰的工作模式。

回答

1

設置使用此代碼的餅乾,讓我們看看它是如何工作

var http = require('http'); 
    function parseCookies (request) { 
    var list = {}, 
    rc = request.headers.cookie; 
    rc && rc.split(';').forEach(function(cookie) { 
    var parts = cookie.split('='); 
    list[parts.shift().trim()] = decodeURI(parts.join('=')); 
    }); 
    return list; 
    } 
    http.createServer(function (request, response) { 

    // To Read a Cookie 
    var cookies = parseCookies(request); 

    // To Write a Cookie 
    response.writeHead(200, { 
    'Set-Cookie': 'mycookie=test', 
    'Content-Type': 'text/plain' 
    }); 
    response.end('Hello World\n'); 
    }).listen(8124); 

    console.log('Server running at http://127.0.0.1:8124/'); 

並以要call.Hope這個hepls爲你添加路由。

2

你不回從parseCookies功能的話,就是return decodeURI(parts.join('=')).replace(/-/g, '=')被調用,在foreach的回調,所以這回是意義

因爲那個parseCookies返回undefinedundefined + undefinedNaN

當使用forEach時,您需要將匹配的結果保存在一個臨時變量result中,並返回該值。

function parseCookies(request, finding) { 
    var result; 
    var rc = request.headers.cookie + ';'; 
    rc && rc.split(';').forEach(function(cookie) { 
    var parts = cookie.split('='); 
    if (parts.shift().trim() == finding) { 
     result = decodeURI(parts.join('=')).replace(/-/g, '='); 
    } 
    }); 

    return result; 
} 

或者使用Array.prototype.find(我沒有時間來測試版本,所以有可能是一個bug):

function parseCookies(request, finding) { 
    var rc = request.headers.cookie + ';'; 

    var cookie = rc.split(';').find(cookie => cookie.split('=').shift().trim() == finding); 

    return decodeURI(cookie.split('=').join('=')).replace(/-/g, '='); 
} 

但是,爲什麼你反正解析餅乾你的自我。有強大且經過充分測試的中間件可以爲您做到這一點。