如何捕获express框架app.listen的异常?
由于在启动项目时会出现
uncaught exception: Error: listen EADDRINUSR 155.145.111.11:45621
...
...
所以想捕获listen的异常。但在网上查了之后都是用的process.on(‘uncaughtexception’,function)此方法。 有没有直接捕获listen的异常的方法呀,求助。
6 回复
app.listen()
的第二个参数是一个回调,而这个回调的第一个参数是错误
@steambap 不知道你有没有亲手试过,反正我这样试过是不行,捕获不到异常。 下面是我写的测试代码:
let express = require('express');
let app = express();
app.use('/', function(req,res){
res.write('hehe');
res.end();
});
app.listen(12789, function(err){
if(err){
console.log(err); //当打开此程序后,再次打开然而断点断不住此处。
}
});
求关注,1楼的方法并不管用。
像这种端口占用的错误,就是要抛出来进程挂掉哇,端口都被占用了,就算你捕获到让进程处理假死状态不退出也没有意义啊
先来点非营养品:
1、process.on(‘uncaughtexception’, callback)
是进程级别的异常捕获;
2、app.listen(port, callback);
这里的 callback 可以理解为,整个框架都是通过一个回调函数来处理 HTTP 请求,里面进程 MVC 等各种设计;
来看看 app.listen 到底做了什么:https://github.com/expressjs/express/blob/master/lib/application.js#L617。
====== 正义分割线
- 通过 app.listen 我们其实得到一个 server 对象,通过监听 server 对象的错误事件可以获取到错误信息;
server.on('error', (e) => {
if (e.code === 'EADDRINUSE') {
console.log('Address in use, retrying...');
setTimeout(() => {
server.close();
server.listen(PORT, HOST);
}, 1000);
}
});
- 通过 server.listening 方法可以提前判断端口是否被占用;
- listen 时指定端口为 0 ,会随机分配一个可用的端口;
别问我东西哪来的,看文档~