节点 – 处理数据库错误,而不会崩溃

不pipe数据库的types如何,我都无法清楚地看到处理db错误的最佳方式,而不会导致应用程序崩溃。

eg connecting with sql pool.getConnection(function(err, connection) { if (err) { throw err } connection.execute('select * ...' , values, function(err, result) { if (err) { throw err; } }); }); 

在上述两种情况下,我都会抛出导致节点服务器崩溃的错误。 我想注册错误,并以最优雅的方式回应请求。 任何人都可以指出正确的方向?

当你抛出一个错误,有人需要赶上他们。 如果你没有在代码中的任何地方捕捉到它们,它将导致程序崩溃。

所以基本上你需要做的就是用try / catch函数把调用包装到你的函数中,以防万一你把它logging下来,并且向请求者返回一个apporopriate响应。

就像是:

 try { pool.getConnection(function(err, connection) { if (err) { throw err } connection.execute('select * ...' , values, function(err, result) { if (err) { throw err; } }); }); } catch (error) { log(error); res.status(500).body("failed to get ... " + err).send(); } 

我也推荐阅读这篇博文 ,对这个话题有很好的解释