我正在使用 next.js 14 和应用程序路由器创建一个实时网络应用程序。 我正在添加一个 MQTT 连接,该连接在底层使用 Mosquito。 我正在使用 mqtt.js 库并像这样连接到代理:
const mqttClient: MqttClient = mqtt.connect("ws://my-broker-name:883", {
reconnectPeriod: 1000,
connectTimeout: 30 * 1000,
keepalive: 60,
});
我在一个单独的文件中执行此操作,以便仅创建 mqttClient 的一个实例。 之后,我创建一个路由处理程序,在其中导入 mqtt 初始化模块并订阅 mqttClient 的主题。路由处理程序 (GET) 之后在我的根 page.tsx 页面中调用。
我收到的错误非常奇怪,我几乎找不到任何关于它的资源:
⨯ uncaughtException: TypeError: bufferUtil.mask is not a function
at module.exports.mask (webpack-internal:///(rsc)/./node_modules/ws/lib/buffer-util.js:121:23)
at Sender.frame (webpack-internal:///(rsc)/./node_modules/ws/lib/sender.js:138:7)
at Sender.send (webpack-internal:///(rsc)/./node_modules/ws/lib/sender.js:359:16)
at WebSocket.send (webpack-internal:///(rsc)/./node_modules/ws/lib/websocket.js:476:18)
at duplex._write (webpack-internal:///(rsc)/./node_modules/ws/lib/stream.js:151:8)
at doWrite (node:internal/streams/writable:590:12)
at clearBuffer (node:internal/streams/writable:774:7)
at onwrite (node:internal/streams/writable:644:7)
at afterWrite (node:internal/streams/writable:701:5)
at afterWriteTick (node:internal/streams/writable:687:10)
at process.processTicksAndRejections (node:internal/process/task_queues:81:21)
我会感谢任何建议和帮助。 如果需要一些额外的信息,我会提供:)
我调试了代码,似乎时间上存在某种问题 - mqttClient 初始化得不够快,因此在处理路由函数中使用它时它是未定义的。
额外安装 bufferutil 库似乎有帮助。 该库是从 ws 库使用的,而 ws 库是从 mqtt.js 库使用的。