You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js使用Redis向Stream推送消息时request body值传入解析问题

问题解决方案

导致解析异常的核心原因有两个:

  • 手动拼接JSON字符串无法处理变量中的特殊字符:如果userID、username包含双引号、反斜杠、换行等特殊字符,会直接破坏JSON结构,引发解析错误
  • 现有xadd参数不符合规则:Redis的xadd方法传入消息内容时要求field和value成对出现,你当前代码在硬编码的message值之后多传入了一个独立的JSON字符串,属于参数结构错误

修正方案

不要手动构造JSON字符串,先定义符合结构的JS对象,再通过JSON.stringify()方法转为标准JSON字符串传入,既可以自动处理所有特殊字符转义,也能避免手动写JSON的格式错误。

修正后代码如下:

async function userRegister (request) {
  var userID = request.body.userID || ''
  var username = request.body.userName || ''

  // 先构造消息内容的JS对象
  const messageContent = {
    "module": "*",
    "user_id": userID,
    "username": username
  }
  // 转成标准JSON字符串,自动处理转义
  const messageStr = JSON.stringify(messageContent)

  redisClient.xadd(
    'user:create',
    '*',
    'module',
    'userRegister',
    'request_id',
    '2312432434',
    'message',
    messageStr, // 直接传入生成好的JSON字符串即可
    function (err, resp) {
      if (err) {
        console.log(err)
      } else {
        console.log(resp)
      }
    }
  )
}

如果你需要保留原来那条硬编码的测试消息,额外新增一对field-value即可,比如给硬编码消息指定test_message作为field名,不要直接在参数列表里拼接无归属的JSON字符串。

内容的提问来源于stack exchange,提问作者vlas fama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 04:21:02