разъем.ввод-вывод не определен и отказывается от подключения

#html #css #node.js #express #socket.io

#HTML #CSS #node.js #экспресс #socket.io

Вопрос:

введите описание изображения здесьвведите описание изображения здесьЯ использую сокет.ввод-вывод для отображения сообщения, но когда я запускаю узел server.js он не регистрирует в консоли ни одно выходное сообщение. Я прикрепил свой chat.html, server.js и main.js файл, чтобы показать сокет.код ввода-вывода.

chat.html

 lt;script src="http://localhost:54159/socket.io/socket.io.js"gt;lt;/scriptgt;  lt;script src="js/main.js"gt;lt;/scriptgt;  

server.js

 const http = require('http');  const express = require('express'); const socketio = require('socket.io');   const app = express(); const server = http.createServer(app);  const io = socketio(server);   app.use(express.static(path.join(__dirname, 'public')));  io.on('connection', (socket) =gt; {    console.log('New web socket connection...');   socket.emit('message', 'Welcome to Chat Room!');   });    const PORT = 54159 || process.env.PORT;   server.listen(PORT, () =gt; console.log(`Server running on port ${PORT}`));   

main.js const socket = io();

Комментарии:

1. Вы проверили консоль разработчика браузера, чтобы узнать, есть ли ошибки в скрипте или ошибки загрузки на вашей веб-странице? Вполне вероятно, что один из ваших сценариев неправильно загружается на веб-странице и, следовательно, нет сокета. подключение ввода-вывода.

2. Я в замешательстве, как это сделать. Я определил порт 58228 в Google Chrome, но в скобках, где я выполняю код, указано, что локальный хост-8123. Кроме того, когда я загружаю его, он иногда переключает порты, поэтому я немного не понимаю, как это исправить.

3. Я добавил изображение ошибок, которые я получаю. Я в таком замешательстве, пожалуйста, помогите!

4. Ну, клиент ДОЛЖЕН знать, на каком порту вы работаете. Невозможно установить соединение с вашим сервером, если он не знает порт.

5. Похоже, что 54159 это неправильный порт для вашего сервера, и это то, что вы используете здесь: lt;script src="http://localhost:54159/socket.io/socket.io.js"gt;lt;/scriptgt; so socket. ввод-вывод не загружается должным образом. Какой URL-адрес вы используете для загрузки веб-страницы в браузере? Похоже, в нем есть правильный порт, потому что main.js кажется, что он работает.

Ответ №1:

Хорошо, я думаю, что обобщу рекомендуемые изменения нашего обмена в комментариях:

Измените это:

 lt;script src="http://localhost:54159/socket.io/socket.io.js"gt;lt;/scriptgt;  

к этому:

 lt;script src="/socket.io/socket.io.js"gt;lt;/scriptgt;  

Это избавляет вас от необходимости указывать порт (который в любом случае был неверным).


Изменить:

 /public/chat.html  

Для:

 /chat.html  

чтобы это совпадало с тем, куда смотрит ваша express.static() линия. Для /public/chat.html работы chat.html он должен быть расположен public/public/chat.html на жестком диске вашего сервера, но я предполагаю, что это не так, и, скорее всего, он там public/chat.html . Ваша express.static() линия указывает на public вершину дерева, на которое она смотрит. Любые другие пути в URL-адресе относятся к этому.


И каждый раз, когда вы вносите изменения в код клиента или сервера, убедитесь, что ваш сервер перезапущен, чтобы убедиться, что все последние изменения используются.


Если вы совсем не уверены в том, на каком порту работает ваш сервер, посмотрите на результаты этого, когда ваш сервер запустится:

 console.log(`Server running on port ${PORT}`)  

Это подскажет вам, на каком порту он работает. Ссылка в журнале скобок на порт, вероятно, связана с отладчиком nodejs, который будет находиться на другом порту от вашего веб-сервера.