我不知道这样做的函数,有人知道吗?


当前回答

覆盖express中的所有HTTP动词

为了覆盖所有HTTP动词和所有剩余路径,您可以使用:

app.all('*', cb)

最终的解决方案是这样的:

app.all('*', (req, res) =>{
    res.status(404).json({
        success: false,
        data: '404'
    })
})

你不应该忘记把路由器放在最后。 因为路由器的顺序很重要。

其他回答

https://github.com/robrighter/node-boilerplate/blob/master/templates/app/server.js

这就是node-boilerplate所做的。

上面的答案很好,但其中一半的答案不会返回404作为HTTP状态代码,而另一半答案则不能呈现自定义模板。在Expressjs中拥有自定义错误页面(404)的最佳方法是

app.use(function(req, res, next){
    res.status(404).render('404_error_template', {title: "Sorry, page not found"});
});

将此代码放在所有URL映射的末尾。

如果你想从你的函数(路由)重定向到错误页面,那么做以下事情-

Add general error messages code in your app.js - app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message res.locals.error = req.app.get('env') === 'development' ? err : {} // render the error page // you can also serve different error pages // for example sake, I am just responding with simple error messages res.status(err.status || 500) if(err.status === 403){ return res.send('Action forbidden!'); } if(err.status === 404){ return res.send('Page not found!'); } // when status is 500, error handler if(err.status === 500) { return res.send('Server error occured!'); } res.render('error') }) In your function, instead of using a error-page redirect you can use set the error status first and then use next() for the code flow to go through above code - if(FOUND){ ... }else{ // redirecting to general error page // any error code can be used (provided you have handled its error response) res.status(404) // calling next() will make the control to go call the step 1. error code // it will return the error response according to the error code given (provided you have handled its error response) next() }

这种方法更简单,但它必须是所有路线之后的最后一件事。

app.use( (req, res) => {
    //render page not found 
    res.render('404')
})

如果您使用express-generator包:

下(err);

这段代码将您发送到404中间件。