itinéraires imbriqués gérables ...
Je voulais un exemple spécifique de faire des routes imbriquées d'une manière très gérable dans express 4 et c'était le premier résultat de recherche pour "routes imbriquées dans express". Voici une API qui aurait de nombreuses routes qui devraient être interrompues par exemple.
./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;
Exemple d'imbrication dans la structure de dossiers
J'ai remarqué quelques commentaires sur la "structure des dossiers d'imbrication". Cela est implicite mais pas évident, j'ai donc ajouté la section ci-dessous. Voici un exemple spécifique de structure de dossiers imbriqués pour les itinéraires .
index.js
/api
index.js
/admin
index.js
/users
index.js
list.js
/permissions
index.js
list.js
Ceci est plus un exemple général du fonctionnement du nœud. Si vous utilisez "index.js" dans des dossiers de la même manière que "index.html" fonctionne dans les pages Web pour un répertoire par défaut, il sera facile de faire évoluer votre organisation en fonction de la récursivité sans modifier vos points d'entrée en code. "index.js" est le document par défaut auquel on accède lors de l'utilisation de require dans un répertoire.
contenu de index.js
const express = require('express');
const router = express.Router();
router.use('/api', require('./api'));
module.exports = router;
contenu de /api/index.js
const express = require('express');
const router = express.Router();
router.use('/admin', require('./admin'));
module.exports = router;
contenu de /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;
contenu de /api/admin/users/index.js
const express = require('express');
const router = express.Router();
router.get('/', require('./list'));
module.exports = router;
Il y a peut-être des problèmes DRY ici, mais cela se prête bien à l'encapsulation des préoccupations.
FYI, récemment, je suis entré dans l'actionhero et j'ai trouvé qu'il était complet avec des sockets et des tâches, plus comme un véritable cadre tout-en-un renversant le paradigme REST. Vous devriez probablement le vérifier en allant nu avec express.