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.