答案 0 :(得分:1)
Express不会发送not-found.html
,因为管道中更高级别的内容正在处理对/asdfasd
的GET请求。
在您的情况下,APP.use(SHOP_ROUTES)
正在处理您的请求,因为所有请求(不包括以/admin
开头的请求)都会先发送到SHOP_ROUTES
。
有些情况说明了为什么您看不到not-found.html
:
情况1:您正在商店路由器中使用
router.use()
,它正在处理请求。
在此示例中:
/routes/shop.js
router.use((req, res, next) => res.send('Something'))
对/asdfasd
的请求将在页面上显示单词“某些东西” 。 Express不会进一步处理该管道,因为该请求已被处理。
情况2::您的车间路由器内部有一个不使用
next()
的异步功能。
例如,如果您要调用某个API:
/routes/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
中,您有一条动态路线,例如以下路线:
/routes/shop.js
router.get('/:word', (req, res, next) => res.send(req.params.word))
任何对/
的请求都没有被先前的路由处理。