Маршрут не вызывается, когда он определен в отдельном файле - PullRequest
0 голосов
/ 06 июля 2018

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

Но у меня возникают проблемы при вызове определенных маршрутов.

Это мой файл server.js

const express = require("express");
const bodyParser = require("body-parser");
const normalizePort = require("./utils/normalize-port");

const app = express();
const port = normalizePort(process.env.PORT || 5000);
app.set("port", port);

require("./components/users");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

require("./config/database");

app.listen(port, () => console.log(`Application started on port : ${port}`));

А это мой index.js файл в /components/users/

const router = require("express").Router();
const user = require("./users")(router);

module.exports = { user };

А это мой users.js файл, который находится в том же каталоге, что и выше index.js .

module.exports = router => {
  console.log("Hello at First");
  router.get("/hello", (req, res) => {
    console.log("hello");
    res.send("hello");
  });
};

Теперь, когда я запускаю сервер в http://localhost:5000, консоль записывает сообщение как это

Hello at First
Application started on port : 5000

Итак, это означает, что файл вызывает, верно? Но когда я пытался подключиться к http://localhost:5000/hello, который я определил в users.js, выдает ошибку Cannot GET /hello. Поскольку я собираюсь определить несколько маршрутов только в папке / components / users , я создал файл index.js, чтобы экспортировать все из одного файла. Как я могу это исправить, сохранив ту же структуру?

Почему это? Почему мой маршрут не звонит?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Ваш /components/users/index.js должен экспортировать объект маршрутизатора вместо другого компонента, такого как

const router = require("express").Router();

require("./users")(router);
//require("./others")(router);

module.exports = router;

, а затем использовать в качестве промежуточного программного обеспечения в вашем основном файле

const express = require("express");
const bodyParser = require("body-parser");
const normalizePort = require("./utils/normalize-port");

const app = express();
const port = normalizePort(process.env.PORT || 5000);
app.set("port", port);

const usersComponent = require("./components/users");

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(usersComponent);
//or point point specific route app.use('/user', usersComponent);

require("./config/database");

app.listen(port, () => console.log(`Application started on port : ${port}`));
0 голосов
/ 06 июля 2018

/components/users/indexjs ничего не делает, но экспортирует user - функцию, которую вы определили в users.js.

Вы определяете и используете router объект, но не можете смонтировать / app.use() его в основной Express app. Таким образом, запрос к GET /hello не существует.

Вам необходимо экспортировать определенный вами объект router, а затем:

app.use('/some-endpoint', routerObject)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...