Как создать крупномасштабные сайты express.js
Я довольно новичок в ландшафте node.js и express.js. Однако я пытался обернуть голову вокруг кода, стоящего за созданием сайта (например, более 20 страниц) в express.js, при этом код не становился достаточно большим.
Маршрут при использовании механизма просмотра указывает входящий запрос на индекс или любую запрашиваемую им страницу. После запуска экспресс-генератора по умолчанию с движком вида, установленным в HBS, вы получите что-то вроде
app.use('/', index);
Это указывает на файл index.js в папке маршрутов, который содержит что-то вроде
router.get('/', function(req, res, next){
res.render('index', {title: 'Express'});
});
Затем он отображает файл index.hbs, чтобы показать, что я хочу на странице.
Моя проблема в этом. Нужно ли вам иметь маршрут для каждой страницы, которую вы хотите, например, страницу профиля, страницу входа, о странице и т. Д.? Если это так, разве это не создаст много строк кода в маршрутах, если у вас более 20 маршрутов? Пример будет в app.js
app.use('a', a);
app.use('b', b);
...
app.use('z', z);
тогда каждому потребуется соответствующий файл маршрута js.
Я предполагаю, что есть более чистый способ сделать маршрутизацию или, может быть, я слишком обдумал это?
Любой свет на эту проблему / мой вопрос был бы удивительным.
3 ответа
На моих экспресс-серверах я разбиваю маршруты на разные секции, называемые "компонентами". Каждый компонент может соответствовать странице предоставления, если вы выполняете рендеринг на стороне сервера, или он может соответствовать набору маршрутов API.
Каждый компонент может иметь контроллеры для обработки каждого маршрута, и каждый контроллер может заимствовать у нескольких операций многократного использования.
Вот пример компонента экспресс-сервера, который я сделал (этот пример для набора маршрутов API, но ту же архитектуру можно использовать для наборов маршрутизации серверной части hbs):
Это зависит от того, насколько похожи ваши маршруты:
- Если бы они в основном имели одинаковую функциональность, я бы поместил их в один файл.
- Если есть небольшие вариации, я бы создал отдельный класс, содержащий основные функции, а затем вызвал бы то, что когда-либо необходимо, отдельно.
- Если они совершенно разные, поместите их все в отдельные файлы
Это даст вам общее представление о том, как сделать каждый:
Как правило, вы создаете файлы маршрутов вокруг проблемных областей, хотя данный маршрутизатор может определять любые конечные точки, которые имеют смысл. Например, предположим, что на вашем сайте есть несколько статичных страниц (например, примеры "about" и "index"), а затем несколько страниц, основанных на записях блога (создание, просмотр, просмотр и т. Д.), А затем несколько страниц вокруг. пользователи (профили пользователей и т. д.). Вы, вероятно, создадите один маршрутизатор для каждого набора вещей, например:
// ./routes/index.js
router.get('/', (req, res) => { res.render('index', {title: 'Express'}); });
router.get('/about', (req, res) => {res.render('about', {title: 'Express'});});
// etc
концептуально, вы могли бы использовать это более просто для извлечения значений "index" или "about" из URI, но я предполагаю, что вы будете делать другие вещи, такие как присвоение переменных и тому подобное.
Тогда в другом файле
// ./routes/blog.js
router.get('/blog', (req, res) => {
// do whatever to fetch info fromt eh DB and render it...
});
И так далее.