управляемые вложенные маршруты ...
Я хотел конкретный пример выполнения вложенных маршрутов в Express 4 очень управляемым способом, и это был лучший результат поиска для «вложенных маршрутов в экспрессе». Вот API, который будет иметь много маршрутов, которые необходимо разбить, например.
./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;
Пример вложенности в структуру папок
Я заметил несколько комментариев о "структуре вложенных папок". Это подразумевается в этом, однако не очевидно, поэтому я добавил раздел ниже. Вот конкретный пример структуры вложенных папок для маршрутов .
index.js
/api
index.js
/admin
index.js
/users
index.js
list.js
/permissions
index.js
list.js
Это более общий пример того, как работает узел. Если вы используете «index.js» в папках аналогично тому, как «index.html» работает на веб-страницах для каталога по умолчанию, будет легко масштабировать вашу организацию на основе рекурсии, не меняя точки входа на код. index.js - это документ по умолчанию, доступ к которому осуществляется при использовании require в каталоге.
содержимое index.js
const express = require('express');
const router = express.Router();
router.use('/api', require('./api'));
module.exports = router;
содержимое /api/index.js
const express = require('express');
const router = express.Router();
router.use('/admin', require('./admin'));
module.exports = router;
содержимое /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;
содержимое /api/admin/users/index.js
const express = require('express');
const router = express.Router();
router.get('/', require('./list'));
module.exports = router;
Возможно, здесь есть некоторые проблемы с СУХОЙ, но это хорошо поддается инкапсуляции проблем.
К вашему сведению, недавно я попал в actionhero и обнаружил, что он является полнофункциональным с сокетами и задачами, больше похож на настоящую платформу «все в одном», которая переворачивает парадигму REST с ног на голову. Вы, вероятно, должны проверить это, пройдя голый с экспрессом.