如何从回调中捕获错误

时间:2013-08-13 13:59:04

标签: node.js mongodb express

简单代码:
initdb.js

var mongo = require('mongodb'),
  MongoClient = mongo.MongoClient,
  MongoServer = mongo.Server;

var mongoClient = new MongoClient(new MongoServer('host',port));
var db = mongoClient.db('db');

mongoClient.open(function (err, mongoclient) {
  if (err) throw err;  
});

如果此代码抛出错误,则不会在此处捕获 main.js

app.use(function(err, req, res, next){
  console.log('error here');
});

结果我有错误和崩溃的应用程序。我只是希望我的应用程序不会崩溃。任何解决方案?

1 个答案:

答案 0 :(得分:1)

您的应用启动时看起来initdb.js运行一次,而不是每次请求都运行一次。这是有道理的,您可能不希望每个请求都有新的数据库连接。

但是,app.use(function(...用于处理请求的代码。当您的应用启动时它不会运行,它会根据您获得的每个请求运行。或者,在这种情况下,只在这些请求抛出错误时运行。 (我假设你在这里使用connect / express。)

因此,差异在于您的数据库连接代码在app.use()链之外运行,并且在第一次请求发生之前运行。

一般来说,如果你无法连接到数据库,快速失败并不是一个糟糕的选择,所以我会说你的代码是正常的。如果您希望服务器在没有数据库的情况下继续运行,请从

更改init.js
if (err) throw err;

if (err) console.error('error connecting to database', err);

如果你愿意,你可以获得一些幻想并添加一些重试逻辑,但这应该足以让你的应用立即崩溃。 (您可能还需要更新应用程序的其他部分才能在没有数据库的情况下工作。)