#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()
— в вашем конкретном примере кода, в «общедоступный» каталог.