首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node-redis:已弃用时出错: SET命令包含Object类型的参数

node-redis:已弃用时出错: SET命令包含Object类型的参数
EN

Stack Overflow用户
提问于 2017-05-09 06:48:43
回答 2查看 3.7K关注 0票数 5

我使用的是connect-redis-crypto模块(https://github.com/jas-/connect-redis-crypto ),它是为在connect-redis(https://github.com/tj/connect-redis)之上加密redis会话数据而构建的。我的redis版本是3.2.8

我遇到了error node-redis: Deprecated: The SET command contains a argument of type Object。根据更大的错误消息,它似乎来自于试图在字符串[object Object]不是JSON字符串时对其进行解析。我将包含用户信息的嵌套对象放在req.session上,该对象直接存储在redis中(最好是加密的)。

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

会非常感谢你的帮助!

代码语言:javascript
复制
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)

EN

回答 2

Stack Overflow用户

发布于 2019-08-03 07:28:58

The solution is here

您必须将对象包装在JSON.stringify中,然后记住在稍后查询键时对响应执行JSON.parse操作。

代码语言:javascript
复制
// set
client.set(
  "key",
  JSON.stringify(
    {
      example: {
        field: "testing",
        field1: 333
      },
      field: 123
    }, () => {}
  )
);

// get
client.get("key", (err, data) => {
  console.log(JSON.parse(data));
});
票数 2
EN

Stack Overflow用户

发布于 2017-05-16 02:25:02

实际上,我能够通过forked库进行调整来修复这个错误。:)

如果有人遇到这样的错误...

https://github.com/rjlee7/connect-redis-crypto

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43858414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档