Перейти к содержанию

description: Найдите ответы на часто задаваемые вопросы по Express.js: структура приложения, модели, аутентификация, движки шаблонов, обработка ошибок и другое.

FAQ

Как структурировать приложение?

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

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

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

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

В Express нет встроенного понятия базы данных. Это оставлено сторонним Node-модулям, поэтому вы можете работать почти с любой СУБД.

Посмотрите LoopBack — это фреймворк на базе Express, ориентированный на модели.

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

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

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

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

Подробнее см. Using template engines with Express.

Как обрабатывать ответы 404?

В Express ответ 404 не считается ошибкой, поэтому middleware обработки ошибок его не перехватывает. Это поведение объясняется тем, что 404 просто означает отсутствие подходящего обработчика: Express выполнил все middleware и маршруты и не нашел ответа. Нужно лишь добавить middleware в самый низ стека (ниже остальных), чтобы вернуть 404:

1
2
3
app.use((req, res, next) => {
    res.status(404).send("Sorry can't find that!");
});

Добавляйте маршруты динамически во время выполнения на экземпляр express.Router(), чтобы их не перекрывал middleware-обработчик.

Как настроить обработчик ошибок?

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

1
2
3
4
app.use((err, req, res, next) => {
    console.error(err.stack);
    res.status(500).send('Something broke!');
});

Подробнее см. Error handling.

Как рендерить обычный HTML?

Никак — в этом обычно нет необходимости. Не нужно «рендерить» HTML через res.render(). Если у вас есть конкретный файл, используйте res.sendFile(). Если нужно раздавать много ресурсов из каталога, используйте express.static().

Какая версия Node.js требуется для Express?

  • Express 4.x требует Node.js 0.10 или выше.
  • Express 5.x требует Node.js 18 или выше.

Комментарии