NodeJS: локальный хост продолжает загружаться

Я использую 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.

Попробуйте app.listen вместо server.listen.

Mr PizzaGuy 21.12.2020 19:32

я также хочу использовать socket.io, поэтому я слушаю сервер, а не приложение.

Sudhir 21.12.2020 19:34

Ваш код выглядит правильно, я воссоздал локально, и он загружается для меня. Возможно, у вас какой-то странный процесс прослушивания в 3000. Вы проверяли ps -a | grep node

uke 21.12.2020 19:41

но вам все равно нужно вернуть ответ пользователю, иначе сервер зависнет, пока не истечет время ожидания.

rags2riches-prog 21.12.2020 19:42

@uke Я пробовал эту команду, она ничего не возвращает

Sudhir 21.12.2020 19:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
2 073
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Express создает веб-сервер при создании сокет-сервера, они оба обслуживаются с одного и того же порта, в данном случае 3000. Чтобы подключиться к веб-сокету, вам нужно использовать socket.io для подключения к «ws://localhost:3000» вместо этого. любого http-запроса, который вы можете делать.

проблема не в socket.io или веб-сервере и сервере сокетов. Страница продолжает загружаться, даже когда загружены все файлы, такие как файлы html, JS и css.

Sudhir 21.12.2020 19:42
Ответ принят как подходящий

Страница «зависает», потому что вы не отправляете ответ пользователю. Код просто обслуживает статические файлы промежуточного программного обеспечения, но тогда вы не обрабатываете цикл запроса/ответа...

Это пример того, что вы могли бы сделать:

// 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()

Sudhir 21.12.2020 19:55

здесь есть некоторая путаница. Позвольте мне уточнить. Express Statis обслуживает ваши статические файлы, но не обрабатывает ваш цикл ответа на запрос, если вы не настроили его таким образом. Вы по-прежнему будете использовать его в своем коде, но вам нужно завершить цикл ответа, отправив ответ клиенту. В моем примере вы отправляете файл index.js, но это могут быть и другие вещи.

rags2riches-prog 21.12.2020 20:00

Другие вопросы по теме