表达,使用 JSON 创建 cookie
express, creating cookie with json
我正在使用Express 3.x并尝试创建一个cookie。
我正在尝试以下 JSON:
res.cookie('cart', {
styles: styles[product],
count: 0,
total: 0
})
其中产品是:
{product: {
"_id": style._id,
"style": style.style,
"a": style.a,
"color": color,
"price": style.price,
"desc": style.desc,
"img": style.img,
"category": style.category,
"quantity": 1
}
}
和
var product = req.params.a + "_" + style.id;
我无法使"样式[产品]"工作。 我的问题是什么??
我需要创建一个看起来像"req.cookies.cart.styles[product]"的 JSON
请帮忙!
您只能在 cookie 中存储字符串值。让我们假设一个情况,你想在cookie中存储一个布尔值true,它被转换成一个字符串"true"并存储在浏览器cookie中。以下代码将执行相同的操作
res.cookie('myBoolean', true)
现在布尔值 true 在 cookie 中存储为字符串 "true"。
在您的情况下,您尝试将对象存储在 cookie 中。所以在内部,你的对象通过调用函数转换成字符串,如下所示
var myObj = {name: 'myObj'}
myObj.toString()
确切地说,在您的代码中,cookie 包含值
res.cookie('cart', ({
styles: styles[product],
count: 0,
total: 0
}).toString())
您可以检查浏览器,您可以看到如下
cookiecart:[object Object]
所以更好的主意是,你必须使用JSON.stringify/JSON.parse,如下所示。
设置饼干:
res.cookie('cart', JSON.stringify({ 款式 : 款式[产品], 计数 : 0, 总数 : 0}))
获取饼干
var cookieData = JSON.parse(req.cookies.cart)
注意:但是您可以使用JSON.stringify存储cookie,存储这样的购物车信息是不可取的。您必须更喜欢会话存储而不是 cookie。
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(",", ";")
目前还不清楚你想要实现什么。如果product
真的是对象,那么它几乎不能用作键 - 它将被转换为[object Object]
字符串,styles[product]
将等于styles['[object Object]']
。
如果styles[product]
返回的产品类似于第二个代码块中的产品,那么style.id
可能应该style.product._id
。
我能建议的最好的方法是通过添加console.log
来检查所有中间步骤。例如:
console.log('keys of styles:', Object.keys(styles));
console.log('product:', product);
res.cookie('cart', {
styles: styles[product],
count: 0,
total: 0
})
这将向您显示添加到 cookie 中的确切内容。使用类似的方法来测试算法的其他部分。
- 在C#中创建cookie,并通过Javascript更改值
- Javascript在不同的功能中创建Cookie
- 可以在没有域名的情况下创建cookie吗
- 从javascript,向我的cookie添加域或过期不会创建cookie
- 在模态窗口上创建 cookie
- 表达,使用 JSON 创建 cookie
- 使用 Javascript 创建 Cookie 并设置过期时间
- 使用按钮 javascript 在 forloop 中创建 Cookie
- 在 PHP 中使用 js API 使用 evercookie 创建 cookie 的问题
- 为每个选项卡单独创建 cookie
- 如何使用外部域创建 cookie
- 在localhost上创建cookie
- asp.net/javascript创建cookie,创建客户端或服务器端的优势
- 用于创建cookie的Javascript代码
- Jquery+Javascript:使用toggle创建cookie
- 使用InvokeScript在Windows Phone中创建cookie
- 在文档准备好之前安全地创建cookie
- 获取JSESSIONID值并在AngularJS中创建Cookie
- 是否有任何方法手动创建cookie的Internet explorer
- 使用ionic angularjs创建cookie,并将cookie持久化很长时间