Почему node.js отправка всей общей папки, когда только root index.html указано?

#node.js #express #server

#node.js #выразить #сервер

Вопрос:

Итак, я делаю node.js сервер для моей веб-страницы. И после добавления корневого маршрута, который отправляет index.html он также отправляет game.html страница, на которой она не указана. В game.html файл находится в папке под названием game в корневом каталоге. Поэтому мне интересно, почему он отправляет game.html файл? И должно ли это произойти, если я не скажу, что сервер должен отправить по пути «/ game»?

Я использую Node.js и выражать.

 const express = require("express");
const app = express();
const port = 3000;

app.use(express.static("public"));

// ROUTES
app.get("/", (req, res) => {
    res.sendFile("index.html", {root: "public"});
})

// Listening
app.listen(port, () => {
    console.log(`Listening at port http://localhost:${port}`);
})
 

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

1. ваша app.use(express.static("public")); строка кода будет обслуживать ВСЕ файлы в этой общей папке, которые соответствуют входящему запросу. Итак, если game.html находится в этой папке, и вы отправляете на свой сервер запрос, который соответствует этому файлу, тогда express.static() он отправит его — вот для чего он используется. Я не могу сказать по вашему вопросу, это то, что вы спрашиваете, или нет.

2. Да, я использую это, express.static(), чтобы получить css для index.htm , Так это причина, по которой он отправляет всю страницу целиком? И если да, то как я могу заставить его отправлять только файлы css и js?

3. Вам нужно ТОЛЬКО поместить вещи в public каталог, который вы хотите express.static() отправить. Если вы не хотите, чтобы он отправлялся game.html , не помещайте этот файл в public дерево каталогов.

4. хорошо, но проблема в том, что он делает это тогда? Для пользователей с ограниченной сетью. Например, это плохой способ убедиться, что css отправляется вместе с файлом html?

5. Какую проблему вы пытаетесь решить? express.static() не отправляет НИЧЕГО, что не было запрошено клиентом. express.static() часто используется для статических файлов, таких как CSS и JS файлы или даже статические HTML файлы — вот для чего он создан. Это эффективно для этого.

Ответ №1:

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

Этот:

 app.get("/", (req, res) => {
    res.sendFile("index.html", {root: "public"});
});
 

довольно очевидно. Если запрос есть / , то отправьте index.html файл обратно.

Этот:

 app.use(express.static("public"));
 

сообщает express сравнить входящий путь запроса с любыми файлами в вашем общедоступном каталоге и, если они совпадают, затем отправить этот файл обратно в качестве ответа на этот запрос. Это именно то, для чего express.static() предназначено и что оно должно делать. Он обычно используется для обслуживания статических ресурсов, таких как CSS-файлы, JS-файлы и даже статические HTML-файлы, поскольку один маршрут может автоматически обслуживать всю иерархию каталогов.

Итак, если поступает входящий запрос на /game/game.html и, общий каталог содержит это:

 public
  game
    game.html
 

Затем express.static("public") найдет соответствие /game/game.html и отправит обратно game.html файл в качестве ответа. Это работает так, как задумано.

Из-за этого вы никогда не должны помещать что-либо, что вы не хотите автоматически обслуживать, в каталог, в который вы передаете express.static() — в вашем конкретном примере кода, в «общедоступный» каталог.