Node-redis: node-redis错误:已弃用:SET命令包含类型为Object的参数

创建于 2017-05-09  ·  3评论  ·  资料来源: NodeRedis/node-redis

也发布在Stack Overflow上: http :

我正在使用connect-redis-crypto模块(https://github.com/jas-/connect-redis-crypto),该模块用于在connect-redis(https://github.com/)顶部加密redis会话数据。 com / tj / connect-redis)。 我的redis版本是3.2.8。

我遇到错误node-redis:不建议使用:SET命令包含类型为Object的参数。 基于较大的错误消息,它似乎来自尝试解析不是JSON字符串的字符串[object Object]。 我将保存用户信息的嵌套对象放在req.session上,该信息直接存储在redis中(理想情况下是加密的)。

从某些来源,我了解到Redis中不允许使用嵌套对象,这可能会导致此错误,但是我相信该库将数据存储为JSON,以允许使用嵌套对象。 connect-redis对我来说工作正常,但是当此connect-redis-crypto库尝试JSON解析加密的数据时,会抛出此特定错误。

非常感谢您的帮助!

node_redis: Deprecated: The SET command contains a argument of type Object. This is converted to "[object Object]" 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. 8 May 18:24:48 - ---NEW REQUEST--- REQUEST : GET /api/somePath/client QUERY : {} BODY : {} data [object Object] err SyntaxError: Unexpected token o in JSON at position 1 at JSON.parse (<anonymous>) at Command.callback (/Users/Documents/web-AOT/server/node_modules/connect-redis-crypto/lib/connect-redis.js:262:35) at normal_reply (/Users/Documents/web-AOT/server/node_modules/redis/index.js:721:21) at RedisClient.return_reply (/Users/Documents/web-AOT/server/node_modules/redis/index.js:819:9) at JavascriptRedisParser.returnReply (/Users/Documents/web-AOT/server/node_modules/redis/index.js:192:18) at JavascriptRedisParser.execute (/Users/Documents/web-AOT/server/node_modules/redis-parser/lib/parser.js:560:12) at Socket.<anonymous> (/Users/Documents/web-AOT/server/node_modules/redis/index.js:274:27) at emitOne (events.js:96:13) at Socket.emit (events.js:189:7) at readableAddChunk (_stream_readable.js:176:18) at Socket.Readable.push (_stream_readable.js:134:10) at TCP.onread (net.js:551:20)

question

最有用的评论

如果提供了该对象,node_redis不会对对象进行字符串化。 原因是,它不知道何时解析字符串,何时不解析。

因此,您实际上在Redis中保存了[object Object] ,正如警告所示。 而且您会遇到解析错误,因为[object Object]不是有效的JSON。 因此,在将对象传递给node_redis之前,请对其进行字符串化处理。

所有3条评论

如果提供了该对象,node_redis不会对对象进行字符串化。 原因是,它不知道何时解析字符串,何时不解析。

因此,您实际上在Redis中保存了[object Object] ,正如警告所示。 而且您会遇到解析错误,因为[object Object]不是有效的JSON。 因此,在将对象传递给node_redis之前,请对其进行字符串化处理。

使用:client.set('key',JSON.stringify({example:{field:'testing',field1:333},field:123},()=> {});
client.get('key',(err,data)=> {
console.log(JSON.parse(data);
});

是否可以对此警告进行回调? 在大型项目中找到这些警告的原因总是很棘手。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Atala picture Atala  ·  3评论

ghost picture ghost  ·  3评论

gpascale picture gpascale  ·  4评论

Alchemystic picture Alchemystic  ·  6评论

michaelwittig picture michaelwittig  ·  3评论