2016-11-21 68 views
0

我正在使用Node.js,Express和Mongoose构建应用程序。我正在使用Cloud9开发环境。我用快递生成器来创建我的应用程序的基础,并已添加到它。快速/节点服务器随机崩溃,events.js ECONNRESET

我似乎随机得到这个错误,服务器停止。它在任何特定事件期间都不会发生,它发生在页面加载之间。它似乎没有发生在任何特定页面上。

我总是得到这个错误,而且我经常不得不重新开始。

events.js:141 
     throw er; // Unhandled 'error' event 
    ^

Error: read ECONNRESET 
    at exports._errnoException (util.js:870:11) 
    at TCP.onread (net.js:552:26) 

当我收到此错误时,MongoDB不会崩溃。我只需要再次启动节点服务器,它工作正常。直到它再次随机崩溃。

我不确定这个错误是否只是C9的一个副作用,如果是这样我不担心它,我只是不希望它在生产中发生,特别是因为我看不到它日志几乎一样容易。

如果我真的无法“处理错误”,我想知道我该怎么做,我宁愿我的服务器在出现问题时不会崩溃。

回答

1

可以使用pm2启动服务器。那么如果有任何错误,你的服务器不会崩溃。它只会抛出错误并继续运行。它也是其他有用的功能。

您可以在这里阅读更多关于pm2的信息https://www.npmjs.com/package/pm2

+0

谢谢你,这基本上是我所需要知道的,我打算在生产环境中使用PM2,所以我认为我应该全部定下来。 – stackers

2

在节点中,whenever an 'error' event is emitted and no one listens to it, it will throw
为了让它不扔,把一个听众放在它上面,并自己处理。这样,您可以使用更多信息记录错误。

您也可以尝试使用有用的node.js选项--abort-on-uncaught-exception。它不仅提供了更详细和有用的错误堆栈跟踪,而且还可以在应用程序崩溃时保存核心文件,以便进一步调试。

要让一组呼叫有一个监听者,您可以使用domains并在运行时捕获其他错误。确保与http(服务器/客户端)相关的每个异步操作与代码的其他部分处于不同的域环境中,域将自动侦听错误事件并将其传播到它自己的处理程序。所以你只能听那个处理程序并获取错误数据。您还可以免费获得更多信息here

也是这个SO answer见...

+0

我应该在哪里倾听?在每一条路线? – stackers

+0

看我的编辑.... – MarcoS

+0

你链接的那些网页似乎没有去正确的地方,我在那个网页上找不到它 – stackers