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`函数对 code是哪里初始化赋值的,然后看到lib/wire/index.js里面有个‘ReverseMessageType‘函数对code有操作,有被迷惑了方向。
其实, $code是在wire.proto里面在MessageType枚举变量里添加一项时, $code就是这一项的赋予的枚举值。如GroupMessage = 10;