当我尝试将以下数据保存到Redis时:
{ _id: 5c9535a742e1ce2b2ce90be5,
email: 'admin@admin.com',
items:
[ { _id: 5c9535c042e1ce2b2ce90be6, product: [Object], quantity: 1 },
{ _id: 5c9535c642e1ce2b2ce90beb, product: [Object], quantity: 1 } ],
createdOn: 2019-03-22T19:21:11.349Z,
__v: 0 }
我收到以下警告:
node_redis: Deprecated: The SETEX command contains a argument of type model.
This is converted to "{ _id: 5c9535a742e1ce2b2ce90be5,
email: 'admin@admin.com',
items:
[ { _id: 5c9535c042e1ce2b2ce90be6, product: [Object], quantity: 1 },
{ _id: 5c9535c642e1ce2b2ce90beb, product: [Object], quantity: 1 } ],
createdOn: 2019-03-22T19:21:11.349Z,
__v: 0 }" by using .toString() now and will return an error from v.3.0 on.
Please handle this in your code to make sure everything works as you
intended it to.
当我尝试从Redis检索数据时,出现以下错误:
undefined:1
{ _id: 5c9535a742e1ce2b2ce90be5,
^
SyntaxError: Unexpected token _ in JSON at position 2
at JSON.parse (<anonymous>)
用于保存到Redis的函数:
exports.setCart = (email, cart) => {
cart - JSON.stringify(cart);
redisClient.setex(email, CACHE_TTL, cart);
}
用于从Redis检索数据的函数:
exports.getCart = (email, callback) => {
redisClient.get(email, (err, cart) => {
if(err) {return callback(err, null)}
console.log('CART FROM CACHE ', cart)
return callback(err, JSON.parse(cart));
})
}
用于将数据保存到Redis的函数调用:
redisClient.setCart(email, cart);
答案 0 :(得分:1)
我认为redis不能直接处理JSON对象-特别是嵌套的JSON。您可以将一个简单的JSON对象存储为哈希(简单来说,这是一个平面JSON,没有包含其他嵌套JSON对象的属性)。
最简单的解决方案是在存储所有内容之前先JSON.stringify()
,然后在检索它们时JSON.parse()
。
如果您的对象不是太大,那还是不错的,这很好。另一种选择是使用flat
npm软件包,该软件包基本上将嵌套的JSON扁平化,以便可以将它们存储为哈希值。您可以在this中等文章中查看有关此内容的更多信息。
答案 1 :(得分:0)
对不起,伙计们,简单的语法错误:
cart - JSON.stringify(cart);
应该是:
cart = JSON.stringify(cart);