所以我在我的网站上托管了一个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
函数返回任何内容,returndecodeURI(parts.join('=')).replace(/-/g, '=')
是通过 foreach 的回调调用的,因此此返回毫无意义。
因为 parseCookies
返回 undefined
并且 undefined + undefined
是 NaN
。
使用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, '=');
}
但是你为什么要自己解析cookie呢?有强大且经过良好测试的中间件可以为您完成此操作。
关于javascript - Node.js Cookie 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45473574/