Курсы по NodeJS+SQL
Открыта запись на бесплатный пробный месяц! Жми для подробностей! →
⊗ndExRtFl 14 of 56 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Мы уже начали, но можно присоединится! Жми для записи!

Роутинг и файлы в Express

Пусть у нас есть папка pages, а в ней три файла: 1.html, 2.html, 3.html. Давайте сделаем маршруты, отдающие по запросу соответствующие файлы в браузер:

app.get('/page/1/', function(req, res) { res.sendFile(__dirname + '/pages/1.html'); }); app.get('/page/2/', function(req, res) { res.sendFile(__dirname + '/pages/2.html'); }); app.get('/page/3/', function(req, res) { res.sendFile(__dirname + '/pages/3.html'); });

Сольем три маршрута в один, воспользовавшись параметром:

app.get('/page/:num/', function(req, res) { res.sendFile(__dirname + '/pages/' + req.params.num + '.html'); });

Пусть у вас есть несколько папок, а в этих папках хранятся файлы. Сделайте маршрут, отдающий заданный файл из заданной папки.

Ошибка 404

Давайте теперь сделаем так, чтобы при запросе несуществующего файла отдавалась 404 ошибка. Для этого нам понадобится выполнить проверку файла на существование. Импортируем для этого модуль fs и константы:

import fs from 'fs/promises'; import { constants } from 'fs';

Решим задачу с их помощью:

app.get('/page/:num/', function(req, res) { let path = __dirname + '/pages/' + req.params.num + '.html'; fs.access(path, constants.F_OK).then(() => { res.sendFile(path); }).catch(() => { res.status(404).send('not found'); }); });

Можно переписать код в синхронном стиле:

app.get('/page/:num/', async function(req, res) { let path = __dirname + '/pages/' + req.params.num + '.html'; try { await fs.access(path, constants.F_OK); res.sendFile(path); } catch(err) { res.status(404).send('not found'); } });

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