Начал изучать Node.js и стало интересно, как можно объединять роуты в Node? Сейчас я объясню, что подразумеваю:
Роуты приложения выглядит примерно так:
var controllers = require('./controllers'),
myApp = require('../app'),
admin = require('../admin');
// Основной роутер
module.exports = function (app) {
// Отдаем сайт
app.get('/', myApp.run);
// Отдаем админ-панель
app.get('/admin', admin.run);
// RESTful controllers
controllers(app);
// Если нет обработчиков, 404
app.get('*', function (req, res) {
res.status(404).send("<h1>Page Not found</h1>");
});
};
Тут интересен нам только
controllers(app);
Он выглядит следующим образом:
var navigation = require('./navigation'),
page = require('./page'),
publication = require('./publication'),
setting = require('./setting'),
user = require('./user');
module.exports = function (app) {
// Navigation controller routes
navigation(app);
// Page controller routes
page(app);
// Publication controller routes
publication(app);
// Setting controller routes
setting(app);
// User controller routes
user(app);
};
Где каждый контроллер обрабатывает примерно такие роуты:
var page = require('../../controllers/page');
module.exports = function (app) {
app.get('/api/page', function (req, res) {
res.send(page.page());
});
};
Т.е все запросы идут через url /api/"контроллер"/"метод"
Вот теперь вопрос, можно ли как нибудь сделать так, что бы в корневом роутере можно было как нибудь определять что url такого типа
/api/*
если так, то вызывать роутер контроллеров.
Мне кажется, если запросы не к api, то зачем node'e проходится по промежуточным обработчикам контроллеров? или это экономия на спичках(так как node не запустит промежуточный обработчик в случае не соответствия url)?