调用peer模块peerServer报peerServer is not a function错误
报错原因
两个核心问题导致抛出peerServer is not a function的TypeError:
- 导出成员名书写错误
v0.x版本的peer包中,适配Express的服务端构造方法导出名称是ExpressPeerServer,不存在代码中写的peerServer这个命名导出,解构拿到的值实际是undefined,把undefined当函数调用必然触发类型错误。 - 包版本与结构不匹配
如果本地安装的是v1.0.0及以上版本的peer包,官方已经把服务端信令能力完全拆分到独立包@peerjs/peer-server中,主包peer仅保留前端客户端能力,主入口不会导出任何服务端相关方法,从主包里解构服务端方法只能拿到undefined。
额外注意:错误日志里出现的require("peer")(app)写法也是错误的,peer包主入口导出的是普通对象,不是可以直接传参调用的工厂函数,直接加括号调用同样会触发类型错误。
修复方案
根据使用的包版本选择对应方案即可:
- 方案1:兼容旧版写法
先固定安装v0.x最后一个稳定版的peer包:
修正代码中的导入和初始化逻辑:npm install peer@0.6.1 --saveconst express = require('express'); const http = require('http'); // 注意解构的正确名称为ExpressPeerServer const { ExpressPeerServer } = require('peer'); const app = express(); const server = http.createServer(app); // 初始化peer服务 const peerServer = ExpressPeerServer(server, { debug: true }); // 将peer服务挂载到指定路由路径 app.use('/peerjs', peerServer); server.listen(3000, () => { console.log('服务启动成功,监听端口3000'); }); - 方案2:使用最新版官方推荐写法
安装拆分后的独立服务端包(如果需要对接前端客户端,主包peer可保留安装):
修正导入和初始化代码:npm install peer @peerjs/peer-server --saveconst express = require('express'); const http = require('http'); // 从独立服务端包导入PeerServer构造方法 const { PeerServer } = require('@peerjs/peer-server'); const app = express(); const server = http.createServer(app); // 初始化peer服务 const peerServer = PeerServer({ debug: true, path: '/peerjs' }, server); server.listen(3000);
内容的提问来源于stack exchange,提问作者Anuj Mittal
相关产品推荐
相关产品推荐

