W przypadku większości aplikacji Express standardem jest utworzenie jednego pliku zawierającego wszystkie trasy. Wymagaj tego pliku w pliku app.js i dołącz instrukcję app.use kierującą każde żądanie do „/” i gotowe.

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

To podejście sprawdza się w przypadku większości projektów, ale może prowadzić do powstania długiej listy tras. Każdy rzucany jeden po drugim i każdy zgodny z tą samą konstrukcją:

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

Bardziej modułowe podejście polega na oddzieleniu instrukcji app.use od instrukcji app.js.

Zamiast:

app.use('/', routes);

gdzie trasy są wyeksportowanym obiektem wszystkich Twoich tras, wyeksportuj funkcję, która akceptuje aplikację Express jako parametr. Następnie możesz zażądać w funkcji, przekazać aplikację i pozwolić tej funkcji zaimplementować wszystkie instrukcje app.use.

Jak to wygląda w praktyce?

Utwórz plik indeksu routera, który wywołuje instrukcję app.use dla każdego fragmentu logiki adresu URL aplikacji.

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

Gdzie api.js wygląda następująco:

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

Następnie w app.js wymagaj w trasie Index.js przekazania aplikacji jako parametru do zwróconej funkcji:

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

Dzięki temu wszelkie żądania kierowane do /api mogą być obsługiwane w dedykowanym pliku routingu interfejsu API, a wszelkie żądania kierowane do innej grupy punktów końcowych mogą być izolowane i umieszczane w osobnym pliku.