Пример кода
Экспресс не отправляет not-found.html
, потому что что-то выше в вашем конвейере обрабатывает ваш запрос GET на /asdfasd
.
В вашей ситуации APP.use(SHOP_ROUTES)
обрабатывает ваш запрос, потому что все запросы, кроме тех, которые начинаются с /admin
, сначала отправляются на SHOP_ROUTES
.
Вот несколько случаев, демонстрирующих, почему вы не видите not-found.html
:
Случай 1: Вы используете router.use()
в своем магазинемаршрутизатор и он обрабатывает запрос.
В этом примере:
/ route / shop.js
router.use((req, res, next) => res.send('Something'))
В запросе к /asdfasd
отобразится слово «Нечто» на странице.Express не пойдет дальше по конвейеру, потому что запрос уже обработан.
Случай 2: У вас есть асинхронная функция внутри маршрутизатора вашего магазина, которая не использует next()
.
Например, если вы звоните по какому-либо API:
/ route / shop.js
// request-promise is an HTTP request client that returns a promise
const rp = require('request-promise')
router.use((req, res, next) => {
rp.get('https://myapi.com/users')
.then(response => res.json(response))
.catch()
})
иваш запрос API возвращает код состояния 400+ или 500+, ваш запрос по существу застрял внутри этого router.use()
, потому что вы не указали Express, как обрабатывать неправильные запросы.
Вы должны будете использовать next
выполняет функцию обратного вызова внутри вашего .catch()
:
router.use((req, res, next) => {
rp.get('https://myapi.com/users')
.then(response => res.json(response))
.catch(next)
})
Случай 3: У вас есть динамический маршрут внутри вашего роутера магазина, напр./:word
.
Если в вашем SHOP_ROUTES
, у вас есть динамический маршрут, как показано ниже:
/ route / shop.js
router.get('/:word', (req, res, next) => res.send(req.params.word))
Любой запрос к /
, который еще не был обработан предыдущим маршрутом, будет обрабатываться этим.