Cookie 通常以这种格式传输:
"var1=value1;var2=value2;"
代替
{"var1": "value1"; "var2": "value2"}
我有一个类似的问题 - 我需要将 JSON 对象转换为 cookie,我能够通过将此对象转换为字符串,然后替换一些关键语法元素来解决它:
var req_options = {
headers: {
// ...
'Cookie': JSON.stringify(
{"var1": "value", "var2": "value2"}
).replace(":", "=").replace(/\{|\}|\"/g, "").replace(",", ";")
}
};
就我而言,工作代码的完整版本如下所示:
const request = require('request');
var req_options = {
uri: '...',
headers: {
//'Accept': 'text/html', 'Accept-Charset': 'utf-8', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Cookie': JSON.stringify(
{"var1": "value", "var2": "value2"}
).replace(":", "=").replace(/\{|\}|\"/g, "").replace(",", ";")
}
};
function doRequest() {
return new Promise((resolve, reject) => {
process.stdout.write("Calling for " + req_options.uri + "... ");
request(req_options, function (error, res, body) {
if (res.statusCode === 200) {
console.log("200 OK, answer:\n", JSON.parse(body)); //resolve("200 OK");
}
if (error)
return reject(error);
});
});
}
async function mainLoop() {
console.clear();
console.log("Hi");
console.log("headers.cookie: \"" + req_options.headers.Cookie + "\"");
await doRequest().then(function(val) {
console.log(val);
}).catch(function(err) {
console.error(err);
});
console.log("Bye");
}
mainLoop();
在您的情况下,它可能看起来像这样:
res.cookie('cart',
JSON.stringify({
styles: styles[product],
count: 0,
total: 0
}).replace(":", "=").replace(/\{|\}|\"/g, "").replace(",", ";")