带有express和socket.io的节点js-找不到socket.io.js

Posted

技术标签:

【中文标题】带有express和socket.io的节点js-找不到socket.io.js【英文标题】:Node js with express and socket.io -can't fint socket.io.js 【发布时间】:2022-01-06 09:14:42 【问题描述】:

所以基本上我要做的是构建一个带有登录系统的聊天应用程序,但由于某种原因我无法将它放在一起,当我加入聊天室时出现错误。hbs 找不到socket.io.js 文件和 main.js 使用 const socket = io(); (聊天应用无需登录系统也能正常工作)

Failed to load resource: the server responded with a status of 404 (Not Found)
Uncaught ReferenceError: io is not definedat main.js:11

这是 app.js 文件

const express = require("express");
const path = require('path');


const http = require('http');
const socketio = require('socket.io');





const app = express();




const server = http.createServer(app);
const io = socketio(server);

const botName = "Bot";
app.use(express.static(path.join(__dirname, 'public')));

app.use(express.urlencoded( extended: false ));
// Parse JSON bodies (as sent by API clients)
app.use(express.json());
app.use(cookieParser());

app.set('view engine', 'hbs');




  


//eldönti az útvonalat
app.use('/', require('./routes/pages'));
app.use('/auth', require('./routes/auth'));

app.listen(5001, () => 
  console.log("Server started on Port 5001");
)

这是 main.js

const chatForm = document.getElementById('chat-form');
const chatMessages = document.querySelector('.chat-messages');
const roomName = document.getElementById('room-name');
const userList = document.getElementById('users');

// Felhasználó név és szoba név URL-ből
const  username, room  = Qs.parse(location.search, 
  ignoreQueryPrefix: true,
);

const socket = io();

// Csatlakozik chat szobába
socket.emit('joinRoom',  username, room );

// Lekérdezi a szobát felhasználókat
socket.on('roomUsers', ( room, users ) => 
  outputRoomName(room);
  outputUsers(users);
);

还有chat.hbs

<script src="/socket.io/socket.io.js"></script>
<script src="/main.js"></script>

【问题讨论】:

socket.io 文件路径是否正确?或者,尝试使用 socket.io CDN 看看是否可行。 我尝试了许多不同的路径,但都没有奏效。还是一样的问题 404 没找到 【参考方案1】:

问题是我使用了:

app.listen(5001, () => 
console.log("Server started on Port 5001");
)

代替:

server.listen(5001, () => 
console.log("Server started on Port 5001");
)

【讨论】:

【参考方案2】:

Szia,您需要等待 DOM 加载。

window.addEventListener('load', function ()    

  // Your code goes here
  const socket = io();

  socket.on("connect", () => 
    // you can only emit once the connection is established.
    socket.emit('joinRoom',  username, room );
  );

)

【讨论】:

以上是关于带有express和socket.io的节点js-找不到socket.io.js的主要内容,如果未能解决你的问题,请参考以下文章

Node.js - 在同一个端口上使用 Socket.io 和 Express

带有 Node.js 的 Socket.io

使用node express generator配置socket.io

带有 socket.io 和 express 的 Websocket

无法从带有 Socket.IO 的 cookie 中获取 Express 会话 ID

使用 node express 生成器配置 socket.io