[英]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
返回undefined
和undefined + undefined
為NaN
。
使用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.