当前位置: 首页 > 工具软件 > STF > 使用案例 >

stf报错问题汇总

全鸿晖
2023-12-01

Cannot read property ‘$code’ of undefined

TypeError: Cannot read property '$code' of undefined
    at Object.transaction (/Users/renzhicheng/Documents/renzhicheng/mirage/lib/wire/util.js:35:34)
    at Socket.<anonymous> (/Users/renzhicheng/Documents/renzhicheng/mirage/lib/units/websocket/index.js:1080:24)
    at emitThree (events.js:136:13)
    at Socket.emit (events.js:217:7)
    at /Users/renzhicheng/Documents/renzhicheng/mirage/node_modules/socket.io/lib/socket.js:514:12
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickCallback (internal/process/next_tick.js:180:9)

代码指向lib/wire/util.js

, transaction: function(channel, message) {
    return new wire.Envelope(
        message.$code  //$code undefind
      , message.encode()
      , channel
      )
      .encodeNB()
  }

源头:lib/unit/websocket/index.js 要传一个probuf消息

push.send([
            channel
            , wireutil.transaction((
              responseChannel
              , new wire.OpenWebDebugMessage()
            ))
          ])

wireutil.transaction接收的是channel和message两个参数, 而看我贴的websocket index.js里面 transaction后面多加了括号,就变成了 ( responseChannel , new wire.OpenWebDebugMessage() ) 这样的一个对象,传过去了 。 就因为手滑。。。浪费了一小时在上面。。。不得不感叹机器编程要比人工在精细度上好很多,人工太容易出错了。

但也有部分原因是之前对stf操作protobuf这块没有细细研究, 不清楚 message. c o d e 是 哪 里 初 始 化 赋 值 的 , 然 后 看 到 l i b / w i r e / i n d e x . j s 里 面 有 个 ‘ R e v e r s e M e s s a g e T y p e ‘ 函 数 对 code是哪里初始化赋值的,然后看到lib/wire/index.js里面有个`ReverseMessageType`函数对 codelib/wire/index.jsReverseMessageTypecode有操作,有被迷惑了方向。

其实, $code是在wire.proto里面在MessageType枚举变量里添加一项时, $code就是这一项的赋予的枚举值。如GroupMessage = 10;

 类似资料: