使用websockets开发时出现prototype未定义的TypeError报错如何解决
报错根因
你碰到的Uncaught TypeError: Cannot read property 'prototype' of undefined错误,核心原因是你使用的nowjs库已经停止维护近10年,仅兼容Node.js 0.8/0.10等极低版本,和你当前使用的高版本Node.js完全不兼容,库内部依赖的旧版Node核心API、Socket.io接口在新版本中已经被删除或修改,导致初始化时调用不存在的属性报错。
解决方案
方案1:降级Node.js版本(仅用于兼容旧代码,不推荐长期使用)
如果你必须运行当前这份nowjs的代码,操作步骤如下:
- 卸载当前高版本Node.js,安装Node.js 0.10.48历史版本
- 重新安装对应版本的nowjs依赖:
npm install now@0.8.1 - 重新启动服务即可正常运行
方案2:替换为当前主流WebSocket方案(推荐)
现在Node.js实现聊天功能普遍使用维护活跃、兼容性好的socket.io库,改写后的服务端代码如下:
// 先安装对应依赖:npm install socket.io const fs = require('fs') const html = fs.readFileSync(__dirname + '/simpleChat.html'); const server = require('http').createServer(function (req, res) { res.end(html); }); server.listen(8080); const { Server } = require("socket.io"); const io = new Server(server); io.on('connection', (socket) => { // 接收客户端发送的消息 socket.on('distributeMessage', (name, message) => { // 广播给所有连接的客户端 io.emit('receiveMessage', name, message) }) });
你只需要同步把前端simpleChat.html里的调用逻辑替换为socket.io客户端API即可。
内容的提问来源于stack exchange,提问作者COULIBALY
相关产品推荐
相关产品推荐

