节点未重定向到“找不到页面” 404

时间:2019-07-01 19:47:19

标签: node.js node-request

如果我去http://localhost:4000/asdfasd,应该会看到找不到页面,并且服务器中的console.log也没有,或者我都看不到。

APP.JS

page = 112

1 个答案:

答案 0 :(得分:1)

Example code


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))

任何对/的请求都没有被先前的路由处理。