socket.io报ReferenceError: io is not defined 加载socket.io.js 404求助
错误原因
两个报错是因果关系:/socket.io/socket.io.js 404导致前端没加载到socket.io客户端脚本,全局io方法不存在,触发第二个引用错误。
核心问题出在服务启动逻辑上:你已经手动创建了绑定socket.io的HTTP服务实例server,但最后用app.listen启动服务,这个方法会内部生成新的HTTP实例,和你绑定了socket.io的server没有关联,socket.io对应的客户端静态资源路由没有被注册到实际对外服务的实例上,所以访问不到对应文件。
修复方法
修改server.js的服务启动代码,将最后一行的app.listen(3030);替换为server.listen(3030);即可,修改后的完整server.js代码如下:
const express=require('express'); const app=express(); const server=require('http').Server(app); const {v4: uuidv4}= require('uuid'); const io=require('socket.io')(server) app.set('view engine', 'ejs'); app.use(express.static('public')); app.get('/',(req,res)=>{ res.redirect(`/${uuidv4()}`); }) app.get('/:room',(req,res)=>{ res.render('room',{roomId :req.params.room}); }) io.on('connection',socket=>{ socket.on('join-room',()=>{ console.log("Room Joined"); }) }) server.listen(3030);
修改后重启Node服务,刷新页面即可恢复正常。
内容的提问来源于stack exchange,提问作者Rudransh J
相关产品推荐
相关产品推荐

