我看了下网上写的大部分都是说在所有的路由规则之后写上
res.render('404.html', {
title: 'No Found'
})
});```
这样写 确实是可以实现404的捕捉的,但是我个人总觉得这种做法有点投机技巧,而且假如我在想其他的错误呢?
所以我的想法是能不能直接在http里面获取到404相关的信息? 但是我查看了request的信息 没有看到有关的信息,
```headers:
{ host: 'localhost:3000',
connection: 'keep-alive',
accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36',
'accept-encoding': 'gzip,deflate,sdch',
'accept-language': 'zh-CN,zh;q=0.8',
cookie: 'username=admin',
'if-none-match': 'W/"9c-2619173066"' },```
所以想请教各位是如何捕捉各种错误的?
@think2011 输出404 我这里有写好的自定义中间件,可是问题在于 假如我现在随便输入一个路由,这个路由指向的页面肯定是没有的,那么我程序应该如何来判断这个页面是找不到的呢? 我看很多人都是在所有路由之后写404的处理,可是假如我还想输出其他的错误呢?如果想输出500,503 等等其他的错误呢?又该如何实现? 所以我猜想能不能直接开始就捕捉到错误代码,然后我再输出对应的页面呢?
app.use(function (err, req, res, next) {
if (err.status == 404) {
res.status(404);
return res.render('portal/404');
}
next();
});
后面再处理别的错误,什么500之类的
@hc2014 据说有人 是把所有支持的路由记录下来,然后http过来,看请求头就知道自己支不支持。 不过我不理解,在所有路由后处理404有什么问题, 都已经到最后了,还会想输出什么错误呢?除了404外。
@macross2005 我懂你的意思,404放最后的确是可以解决问题的,可是呢 错误代码肯定不是只有404一个对吧?如果把404放最后那就相当于是if else的感觉 把所有可能性排除完了 剩下的就是404了, 但是如果我还想获取其他的错误代码呢?打个比方来说 我还想获取 500,503 那样的话,切先不说500,503这两个错误代码的意思,那我就是想这么做,又该把 这两个的 路由放哪呢?我该怎么写呢? 不知道是我自己理解错了,还是怎样?我还真不行 就我一个人是这样想的
客户端发送一个HTTP请求到服务器端,你这边是这么处理的:
switch(req.path) {
case ROUTE1:
// 路由1的处理
// 一切正常
res.statusCode =200;
res.end('OK');
break;
case ROUTE2:
// 路由2的处理
// 经过检查,用户无权访问这个资源
res.statusCode=403;
res.end('Forbidden');
break;
// ...
case ROUTEn:
// 路由n的处理
// 服务器端出错了
res.statusCode=500;
res.end('Internal Server Error');
break;
default:
// 显然,其它所有的请求路由都是未定义的,所以返回404很自然。
res.statusCode = 404;
res.end('NOT FOUND');
};
也就是说,所有的状态码是由服务器返回给客户端的,不是HTTP请求带来的。
@bnuhero 刚才看了下https://github.com/strongloop/express/blob/master/examples/error-pages/index.js, 然后再看看你的 我想我应该是明白了,给你点个赞!