überschaubare verschachtelte Routen ...
Ich wollte ein spezielles Beispiel dafür, wie verschachtelte Routen in Express 4 auf sehr überschaubare Weise ausgeführt werden. Dies war das Top-Suchergebnis für "verschachtelte Routen in Express". Hier ist eine API mit vielen Routen, die beispielsweise aufgelöst werden müssten.
./index.js:
var app = require('express')();
// anything beginning with "/api" will go into this
app.use('/api', require('./routes/api'));
app.listen(3000);
./routes/api/index.js:
var router = require('express').Router();
// split up route handling
router.use('/products', require('./products'));
router.use('/categories', require('./categories'));
// etc.
module.exports = router;
./routes/api/products.js:
var router = require('express').Router();
// api/products
router.get('/', function(req, res) {
res.json({ products: [] });
});
// api/products/:id
router.get('/:id', function(req, res) {
res.json({ id: req.params.id });
});
module.exports = router;
Verschachtelungsbeispiel in Ordnerstruktur
Ich habe einige Kommentare zu "Verschachtelungsordnerstruktur" bemerkt. Dies ist jedoch nicht offensichtlich, daher habe ich den folgenden Abschnitt hinzugefügt. Hier ist ein spezielles Beispiel für eine verschachtelte Ordnerstruktur für Routen .
index.js
/api
index.js
/admin
index.js
/users
index.js
list.js
/permissions
index.js
list.js
Dies ist eher ein allgemeines Beispiel für die Funktionsweise des Knotens. Wenn Sie "index.js" in Ordnern ähnlich wie "index.html" auf Webseiten für einen Verzeichnisstandard verwenden, können Sie Ihre Organisation auf der Grundlage der Rekursion leicht skalieren, ohne Ihre Einstiegspunkte in Code zu ändern. "index.js" ist das Standarddokument, auf das bei Verwendung von require in einem Verzeichnis zugegriffen wird .
Inhalt von index.js
const express = require('express');
const router = express.Router();
router.use('/api', require('./api'));
module.exports = router;
Inhalt von /api/index.js
const express = require('express');
const router = express.Router();
router.use('/admin', require('./admin'));
module.exports = router;
Inhalt von /api/admin/index.js
const express = require('express');
const router = express.Router();
router.use('/users', require('./users'));
router.use('/permissions', require('./permissions'));
module.exports = router;
Inhalt von /api/admin/users/index.js
const express = require('express');
const router = express.Router();
router.get('/', require('./list'));
module.exports = router;
Möglicherweise gibt es hier einige DRY-Probleme, aber es eignet sich gut zur Zusammenfassung von Bedenken.
Zu Ihrer Information, vor kurzem bin ich zu Actionhero gekommen und habe festgestellt, dass es mit Sockets und Aufgaben ausgestattet ist, eher wie ein echtes All-in-One-Framework, das das REST-Paradigma auf den Kopf stellt. Du solltest es dir wahrscheinlich ansehen, wenn du nackt mit Express bist.