Javascript 防止Express.js崩溃

Javascript 防止Express.js崩溃,javascript,node.js,express,Javascript,Node.js,Express,我对Express.js很陌生,与其他服务器(如Apache或IIS)相比,最让我吃惊的是,Express.js服务器每次遇到未修补的异常或错误时都会崩溃,关闭站点并让用户可以访问。一件可怕的事 例如,我的应用程序因Javascript错误而崩溃,因为数据库表中的名称更改导致未定义变量 TypeError:无法调用未定义的方法“replace” 这不是一个很好的例子,因为我应该在将站点移动到生产环境之前解决它,但有时可能会出现类似的错误,这不应该导致服务器崩溃 我希望看到一个错误页面,或者只是该

我对Express.js很陌生,与其他服务器(如Apache或IIS)相比,最让我吃惊的是,Express.js服务器每次遇到未修补的异常或错误时都会崩溃,关闭站点并让用户可以访问。一件可怕的事

例如,我的应用程序因Javascript错误而崩溃,因为数据库表中的名称更改导致未定义变量

TypeError:无法调用未定义的方法“replace”

这不是一个很好的例子,因为我应该在将站点移动到生产环境之前解决它,但有时可能会出现类似的错误,这不应该导致服务器崩溃

我希望看到一个错误页面,或者只是该特定页面中的一个错误,但是为此类事情关闭整个服务器听起来很可怕

这似乎还不够

我一直在阅读Node.js中关于如何解决这类问题的内容,但我没有发现专门针对Express.js的内容

我发现的另一个选项似乎并非在所有情况下都被推荐,它是使用工具永远保持进程的运行,因此在崩溃后,它会自动重启。工具,如,或


你们如何处理Express.js中的此类问题?

Apache和nodejs的主要区别在于,Apache在nodejs是单线程的情况下为每个请求分叉一个进程,因此,如果Apache中发生错误,则处理该请求的进程将崩溃,而其他进程将继续工作,而在nodejs中,唯一的线程会停止


在我的项目中,我使用monit检查内存/cpu(如果nodejs占用我的vps的很多资源,那么monit将重新启动nodejs)和daemontools,以确保nodejs始终处于启动和运行状态。

我建议将域与集群一起使用。有一个例子,在文档本身在。expressjs还有一些模块


所以,当发生此类错误时,使用域和集群将有助于我们分离错误发生的上下文,并且只影响集群中的单个工作进程,我们应该记录这些错误,断开集群中的工作进程并重新标记。然后,我们可以读取日志来修复这些需要在代码中修复的错误

我也面临同样的问题,我用try/cache解决了这个问题。因此,我创建了不同的路由文件,并将每个路由文件包含在try/cache块中,如下所示

try{
  app.use('/api', require('./routes/user'))
}
catch(e)
{
  console.log(e);
}


try{
  app.use('/api', require('./routes/customer'))
}
catch(e)
{
  console.log(e);
}

我们在OpenShift上部署服务器,它们使用node supervisor()在崩溃后保持服务器正常运行。您可能需要查看此软件包。@Ben听起来与类似,但当服务器崩溃时,它也会重新启动。