Для большинства приложений Express стандартным является создание одного файла, содержащего все ваши маршруты. Потребуйте этот файл в своем app.js и включите инструкцию app.use, нацеленную на любой запрос на «/’ и , все готово.

const express = require('express');
const routes = require('./routes/index');
const app = express();
app.use('/', routes);

Этот подход работает для большинства проектов, но может привести к длинному списку маршрутов. Каждый бросается один за другим и каждый следует одной и той же конструкции:

router.get('/', ....);
router.get('/bears/habitats', ...);
router.post('/panthers', ...)
router.get('/lions', ...);
...

Более модульный подход состоит в том, чтобы отделить инструкцию app.use от app.js.

Скорее, чем:

app.use('/', routes);

где routes - это экспортированный объект всех ваших маршрутов, экспортируйте функцию, которая принимает Express app в качестве параметра. Затем вы можете потребовать функцию, передать ее app и позволить этой функции реализовать все операторы app.use.

Как это выглядит на практике?

Создайте файл индекса маршрутизатора, который вызывает инструкцию app.use для каждой части логики URL вашего приложения.

// routes/index.js
const api = require('./api');
module.exports = function(app) {
app.use('/api', api);
};

Где api.js выглядит так:

// routes/api.js
const express = require('express');
const apiRoutes = express.Router();
apiRoutes.get('/',...);
apiRoutes.get('/Jaguars',...);
module.exports = apiRoutes;

Затем в app.js укажите в маршруте index.js передачу app в качестве параметра возвращаемой функции:

// app.js
require('./routes/index')(app);

При этом любые запросы к / api могут обрабатываться в специальном файле маршрутизации api, а любые запросы к другой группе конечных точек могут быть изолированы в их собственном файле.