express4出什么异常时会导致node崩溃?
发布于 7 年前 作者 545288703 4608 次浏览 来自 问答

这几天在公司的项目中因为express服务端出现了一个null.id的空指针错误,导致node崩溃。但是我在自己另起了一个express项目测试,发现程序并没有挂掉。下面是截图和报错信息: 这是公司的项目中报错的代码: getoper.png unique.png 这是报错报错的具体信息: error.png 下面是我自己写的测试代码: test.png 我试过,在公司项目中也不是每个地方的空指针错误都会使程序挂掉,所有的地方都没有使用try catch,所以nodejs什么时候会挂掉,或者说express的错误什么会冒泡到process从而导致node崩溃,这一点我也很迷糊,请了解的大神不吝赐教。。。

9 回复

把频繁出问题的部分写在在子进程里,崩溃就重试?

来自酷炫的 CNodeMD

@zswnew 没看明白啊…才接触这个一个月,求说的通俗一点.

我的意思是有一个守护进程,

来自酷炫的 CNodeMD

同步代码的异常 Express 能捕获到, 你项目中是在异步回调中产生的异常则不能被正常捕获,所以导致程序退出。 例如你把你测试代码改成异步,也会使得进程退出: app.get(’/err’, function (req, res) { setTimeout(function () { let a = null; a.b = 2; res.send(‘hello world’); }, 1000); });

@zswnew 大概明白你的意思了,就是说我再起一个线程,监控node,如果node崩溃就重启node是吧

@tjeeay 果然是这么回事啊,感谢了,纠结了好久,,,然后我加了下面这一段代码捕捉错误,测试过是可以的,但是你看这是最佳选择吗? app.use(function(err, req, res, next) { logger.error(‘出错了额。。。’,err.stack); res.send({errCode:500,errInfo:‘Something broke!’}); })

process.on(‘uncaughtException’, (err) => { logger.error(‘捕获到错误’,err); });

我没这方面的经验,不过不是重启吧,崩溃后应该有事物回滚那种处理,还要防当次运行数据不丢失。

来自酷炫的 CNodeMD

@zswnew 奈何monogodb不支持回滚啊

你可以先把数据备份到守护线程,操作失败后,进行还原数据的操作

来自酷炫的 CNodeMD

回到顶部