Я использую NodeJS для обслуживания некоторых файлов, но страница продолжает загружаться.
Вот мой index.js файл.
const express = require("express");
const path = require("path");
const http = require("http");
const socketio = require("socket.io");
const app = express();
const PORT = process.env.PORT || 3000;
const server = http.createServer(app);
const io = socketio(server);
app.use(express.static(path.join(__dirname, "../public")));
server.listen(PORT, () => {
console.info("server listening to port: " + PORT);
});
Это мой public/index.html
<!DOCTYPE html>
<html lang = "en">
<head>
<meta charset = "UTF-8">
<meta name = "viewport" content = "width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel = "icon" href = "/favicon.ico">
<link rel = "stylesheet" href = "/css/styles.css">
</head>
<body>
<div id = "media-video">
<video id = "media-camera" autoplay = "autoplay" playsinline>
</video>
<video id = "media-remote-video" autoplay = "autoplay" playsinline>
</video>
<video id = "media-screen-capture" autoplay = "autoplay" playsinline>
</video>
<select name = "video" id = "media-video-devices">
<option value = "None">None</option>
</select>
<select name = "audio" id = "media-audio-devices">
<option value = "None">None</option>
</select>
<button id = "start-media-stream">Start Stream</button>
<button id = "end-media-stream">End Stream</button>
<button id = "start-media-screen-capture">Capture Screen</button>
<button id = "end-media-screen-capture">End screen capture</button>
</div>
<script src = "/socket.io/socket.io.js"></script>
<script src = "/js/index.js"></script>
</body>
</html>
Страница загружается отлично, включая все файлы JS и css, но по-прежнему загружается locahost: 3000.
я также хочу использовать socket.io, поэтому я слушаю сервер, а не приложение.
Ваш код выглядит правильно, я воссоздал локально, и он загружается для меня. Возможно, у вас какой-то странный процесс прослушивания в 3000. Вы проверяли ps -a | grep node
но вам все равно нужно вернуть ответ пользователю, иначе сервер зависнет, пока не истечет время ожидания.
@uke Я пробовал эту команду, она ничего не возвращает



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Express создает веб-сервер при создании сокет-сервера, они оба обслуживаются с одного и того же порта, в данном случае 3000. Чтобы подключиться к веб-сокету, вам нужно использовать socket.io для подключения к «ws://localhost:3000» вместо этого. любого http-запроса, который вы можете делать.
проблема не в socket.io или веб-сервере и сервере сокетов. Страница продолжает загружаться, даже когда загружены все файлы, такие как файлы html, JS и css.
Страница «зависает», потому что вы не отправляете ответ пользователю. Код просто обслуживает статические файлы промежуточного программного обеспечения, но тогда вы не обрабатываете цикл запроса/ответа...
Это пример того, что вы могли бы сделать:
// require http native node api...
var http = require('http');
// initialize express...here the server is not listening
// your files are not served yet...
var app = require('express')();
// this is the middleware that serves your static files
// the css and js come from this...
app.use(express.static(path.join(__dirname, "../public")));
// now you create the server using the HTTP module
// passing express as function and the PORT you have set...
// this is listening, not handling your request/response cycle...
http.createServer(app).listen(PORT);
// this is an example of how you end a request response cycle
// by sending a file back, it could be other things...
app.get('/', function(req, res) {
res.sendFile("index.js");
});
но я хочу обслуживать весь каталог, который включает файл index.html, js и css, поэтому я выбираю использование expess.static()
здесь есть некоторая путаница. Позвольте мне уточнить. Express Statis обслуживает ваши статические файлы, но не обрабатывает ваш цикл ответа на запрос, если вы не настроили его таким образом. Вы по-прежнему будете использовать его в своем коде, но вам нужно завершить цикл ответа, отправив ответ клиенту. В моем примере вы отправляете файл index.js, но это могут быть и другие вещи.
Попробуйте
app.listenвместоserver.listen.