Параметры маршрутов и 404 ошибка в Express

Пусть у нас есть маршрут, параметром которого будет некоторое число:

app.get('/test/:num/', function(req, res) { res.send(req.params.num); });

Давайте разрешим только адреса с числами от 1 до 9, а для остальных адресов отдадим 404 ошибку:

app.get('/test/:num/', function(req, res) { let num = req.params.num; if (num >= 1 && num <= 9) { res.send('your num: ' + num); } else { res.status(404).send('not found'); } });

А теперь давайте проверим, введено число или нет, воспользовавшись регулярным выражением:

app.get('/test/:num/', function(req, res) { let num = req.params.num; if (/\d+/.test(num)) { res.send('your num: ' + num); } else { res.status(404).send('not found'); } });

Сделайте маршрут с некоторым параметром. Реализуйте проверку параметра на это, что это дата в формате год-месяц-день. Верните 404, если это не так.

Общая 404 ошибка

В приведенном выше коде получится, что если адрес начинается с /test/ и дальше не число, то в браузер улетит 404 ошибка. Но в браузер может быть введен и произвольный урл, не начинающийся с /test/. Такие случаи мы должны обработать через app.use:

app.use(function(req, res) { res.status(404).send('not found'); });

Полный код будет выглядеть следующим образом:

app.get('/test/:num/', function(req, res) { let num = req.params.num; if (/\d+/.test(num)) { res.send('your num: ' + num); } else { res.status(404).send('not found'); // начало с /test/, но потом не число } }); app.use(function(req, res) { res.status(404).send('not found'); // адреса, не начинающиеся с /test/ });