2017-08-03 7 views
0

私は自分のウェブサイトでnode.jsファイルをホストしています。私はクッキーを通じてデータを取得しようとしています。 私はeditmycookieを使用しています。クッキーが設定されていることがわかります。Node.jsクッキーが機能しない

私はその後、私はクッキーが

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

を設定し、NaNの

がI」としてそれがログに記録されている知って、これを実行して名前

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, '='); 
     } 

    }); 
} 

からクッキーを取得する機能を持っていますまだノードを学んでいます、ごめんなさい。それは場合に役立ちます

私は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/'); 

をどのように動作するかを確認し、あなたがあなたのためにこれheplsをcall.Hopeしたいあなたのルートを追加することができます。あなたはparseCookies関数から何も返さない

2

return decodeURI(parts.join('=')).replace(/-/g, '=')はforeachののコールバックと呼ばれるので、このリターンは無意味です。

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を使用します(これにはバグがあるかもしれないので、私はそのバージョンをテストする時間がありませんでした):

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, '='); 
} 

しかし、なぜあなたはとにかくクッキーあなたの自己を解析します。あなたのためにこれを行う頑丈でよくテストされたミドルウェアがあります。

関連する問題