簡體   English   中英

Node.js Cookies無法正常工作

[英]Node.js Cookies not working

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

我有一個從名稱獲取Cookie的功能

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

我仍在學習Node,抱歉。

如果有幫助,我將使用Ubuntu 16.04!\\

奇怪的是,它對我網站上的某些用戶有效,而對某些用戶無效。 我沒有注意到誰的工作和誰沒有的模式。

您不會從parseCookies函數中返回任何內容, return decodeURI(parts.join('=')).replace(/-/g, '=')會與foreach的回調一起調用,因此此返回沒有意義

因為為此parseCookies返回undefinedundefined + undefinedNaN

使用forEach ,需要將匹配的結果保存到一個臨時變量result ,並返回該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, '=');
}

但是,為什么您仍然要自己解析Cookie。 有功能強大且經過良好測試的中間件將為您完成此任務。

使用此代碼設置Cookie,然后查看其工作原理

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

並添加您要呼叫的路線。希望為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM