rotas aninhadas gerenciáveis ...
Eu queria um exemplo específico de fazer rotas aninhadas de uma maneira muito gerenciável no express 4 e este foi o resultado da pesquisa principal de "rotas aninhadas no express". Aqui está uma API que teria muitas rotas que precisariam ser divididas, por exemplo.
./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;
Exemplo de aninhamento na estrutura de pastas
Notei alguns comentários sobre a "estrutura de pastas aninhadas". Está implícito nisso, porém não é óbvio, então eu adicionei a seção abaixo. Aqui está um exemplo específico de uma estrutura de pastas aninhada para rotas .
index.js
/api
index.js
/admin
index.js
/users
index.js
list.js
/permissions
index.js
list.js
Este é mais um exemplo geral de como o nó funciona. Se você usar "index.js" em pastas da mesma forma que "index.html" funciona em páginas da Web para um diretório padrão, será fácil dimensionar sua organização com base na recursão sem alterar seus pontos de entrada para código. "index.js" é o documento padrão acessado ao usar require em um diretório.
conteúdo de index.js
const express = require('express');
const router = express.Router();
router.use('/api', require('./api'));
module.exports = router;
conteúdo de /api/index.js
const express = require('express');
const router = express.Router();
router.use('/admin', require('./admin'));
module.exports = router;
conteúdo 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;
conteúdo de /api/admin/users/index.js
const express = require('express');
const router = express.Router();
router.get('/', require('./list'));
module.exports = router;
Existem alguns problemas de DRY aqui, possivelmente, mas ele se presta bem ao encapsulamento de preocupações.
Para sua informação, recentemente entrei em ação e descobri que ela possui recursos completos com soquetes e tarefas, mais como uma verdadeira estrutura tudo em um, lançando o paradigma REST de cabeça para baixo. Você provavelmente deveria dar uma olhada em ficar nu com o expresso.