2017-08-03 92 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, '='); 
} 

但是,为什么你反正解析饼干你的自我。有强大且经过充分测试的中间件可以为您做到这一点。