# Роутинг и файлы в 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 ошибка.

← →
↑