也发布在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)
如果提供了该对象,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);
});
是否可以对此警告进行回调? 在大型项目中找到这些警告的原因总是很棘手。
最有用的评论
如果提供了该对象,node_redis不会对对象进行字符串化。 原因是,它不知道何时解析字符串,何时不解析。
因此,您实际上在Redis中保存了
[object Object]
,正如警告所示。 而且您会遇到解析错误,因为[object Object]
不是有效的JSON。 因此,在将对象传递给node_redis之前,请对其进行字符串化处理。