【问题标题】:Error with node-redis: Deprecated: The SET command contains a argument of type Objectnode-redis 出错:已弃用:SET 命令包含 Object 类型的参数
【发布时间】:2017-10-07 02:11:59
【问题描述】:

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

我遇到了错误node-redis: Deprecated: The SET command contains a argument of type Object。根据较大的错误消息,它似乎来自尝试解析字符串 [object Object] 时它不是 JSON 字符串。我将保存用户信息的嵌套对象放在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)

【问题讨论】:

    标签: json node.js encryption redis


    【解决方案1】:

    The solution is here

    您必须将您的对象包装在JSON.stringify 中,然后在稍后查询密钥时记得将响应发送给JSON.parse

    // 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】:

      实际上,我可以通过分叉库进行调整来修复错误。 :)

      如果有人遇到这个错误...

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

      【讨论】:

        猜你喜欢
        • 2017-09-22
        • 1970-01-01
        • 1970-01-01
        • 2015-03-21
        • 2018-10-17
        • 2022-11-25
        • 1970-01-01
        • 1970-01-01
        • 2021-01-06
        相关资源
        最近更新 更多