Правильный способ добиться того, что вы пытаетесь - это использовать функцию «use».
Вы сказали, что не хотите использовать app.use, потому что хотите заблокировать любой другой доступный метод , но использование функции 'use' не позволит ничего, что не было объявлено на ваших маршрутизаторах, поэтому вам не нужно об этом беспокоиться.
Что app.use делает, это регистрирует функцию промежуточного программного обеспечения для ваше приложение по указанному маршруту. Итак, код ниже:
app.use("/users", require("./routes/users"));
сделает так, что каждый запрос, соответствующий шаблону '/ users', будет использовать предоставленную вами функцию (в данном случае маршрутизатор внутри файла users. js) .
Итак, если кто-то отправит запрос POST в / users / register, например, он получит 404, потому что вы никогда не создавали маршрут для обработки сообщения по этому пути.
И просто, чтобы понять, почему app.get не работает так, как вы, позвольте мне дать краткое объяснение.
Когда вы используете функцию app.get, ожидается, что запрос путь совпадает с тем, который вы указали. Итак, когда вы делаете следующее:
app.get("/users", require("./routes/users"));
Сервер будет ожидать запрос, который точно соответствует / users. Таким образом, что-то вроде / users / example не вызовет функцию обратного вызова.
Дело в том, что функция для обработки запроса в приведенном выше коде - это другой маршрутизатор:
router.get("/login", (req, res) => res.send("login"));
router.get("/register", (req, res) => res.send("register"));
Итак, маршрутизатор будет ожидать, что путь запроса совпадает с / users / login или / users / register. Но если путь запроса совпадает с / users / register, он не будет совпадать с / users, поэтому ничего не будет вызываться.
Причина, по которой ваш путь '/' работает прямо сейчас, заключается в том, что ваш маршрутизатор ожидает того же путь, который вы использовали в файле приложения. js. Таким образом, запрос «/» будет соответствовать обоим шаблонам.