Express и Node.js обучение от StrongLoop

Этот документ может быть устаревшей по отношению к документации на английском языке . Для получения последних обновлений , пожалуйста, обратитесь к документации на английском языке.

This document might be outdated relative to the documentation in English. For the latest updates, please refer the documentation in English.

FAQ

Какую структуру я должен использовать для моего приложения?

Нет единого ответа на данный вопрос. Все зависит от размера вашего приложения и учавствующей в разработке команды. Для того что бы быть как возможно гибким, Express не делает никаких предположений по структуре.

Маршрутизация и другая логика приложения могут размещаться во многих файлах как вы считаете нужным, и иметь любую структуре каталогов которую вы предпочтете. Посмотрите следующие примеры для вдохновления:

Также, существуют сторонние расширения для Express, которые упрощают некоторые из этих шаблонов:

Как я могу определить модели?

Express не имееет определения для работы с базой данных. Это отданно на откуп сторонних Node модулей, что позволяет вам взаимеодействовать с практически любой базе данных.

Смотрите LoopBack фреймворк на базе Express сосредоточеный на работе с моделями.

Как я могу аутентифицировать пользователей?

Это еще один своеобразная область, которую Express не включает в себя. Вы можете использовать любую схему аутентификации, которую вы хотите. Для простой username / password схемы, смотрите этот пример.

Какой шаблонизатор поддерживает Express?

Express поддерживает любой шаблонизатор который согласуется с (path, locals, callback) сигнатурой. Для нормализации интерфейсов шаблонизатора и кеширования, смотрите consolidate.js проект для помощи. Не заявленные шаблонизаторы могут также поддерживать Express сигнатуру.

Как я могу предоставлять статические файлы из нескольких директорий?

Вы можете просто использовать любой промежуточный обработчик несколько раз в вашем приложении. С ниже приведеными настройками промежуточных обработчиков, запрос на получение GET /javascripts/jquery.js, первоочередно проверит ./public/javascripts/jquery.js; если файл в данной директории не существует, тогда проверка будет сделана в последующем промежуточном обработчике ./files/javascripts/jquery.js.

app.use(express.static('public'));
app.use(express.static('files'));

Как я могу указать префикс пути для раздачи статических файлов?

С помощу базовой возможности Сonnect “mounting” вы можете определить “префикс” для того middleware который будет выполнен. Это эффективно работает как будто префикс никогда не был частью пути. Представим, что вам нужно GET /files/javascripts/jquery.js. Вы можете установить /files префикс, определить /javascripts/jquery.js как req.url, тем самым указав middleware файл для выдачи:

app.use('/public', express.static('public'));

Как вы обрабатываете 404 ошибку?

В Express, 404 ошибка не являеться результатом ошибки. Поэтому, обработчик ошибок middleware не поймает 404. Потому что 404 является всего лишь фактом отсутствия дополнительной работы; Говоря иначе, Express выполнит все промежуточные обработчики(middleware) / роутинги(routes), и обнаружит что ни один из них не возвращяет результат работы. Все что вам нужно сделать это добавить обработчик(middleware) в конце (после всех других) для обработки 404:

app.use(function(req, res, next){
  res.send(404, 'Sorry cant find that!');
});

Как вы определяете обработчик ошибок?

Вы можете определить middleware обработчик ошибок тем же самым образом как и другие обработчики(middleware), с отличием указания четерёх аргументов вместо трёх; с определеной сигнатурой (err, req, res, next):

app.use(function(err, req, res, next){
  console.error(err.stack);
  res.send(500, 'Something broke!');
});

Для более подробной информации, смотрите Обработка ошибок.

Как я могу рендерить для выдачи plain HTML?

Вам не нужно этого делать! Нету надобности “ендерить” HTML с помощу res.render(). Если у вас есть такой файл, используйте res.sendFile(). Если вы предоставляете много таких файлов с директории используйте express.static() оработчик(middleware).