2016-04-25 73 views
0

我有一个NodeJS应用程序,Express作为我的Web服务器,Mongoose作为MongoDB的抽象层。现在简单的Express路由就是这样写的。如何在Express和NodeJS中执行Mongoose错误的错误处理。

module.exports.getProfile = function(req, res, next) { 
    Users.findOne({ 
     '_id': req.user._id 
    }).exec(function(err, profile) { 
     if (err) { 
      res.sendStatus(500); 
     } else if (profile) { 
      res.status(200).send(JSON.stringify({ 
       'profile': profile 
      })); 
     } else { 
      res.status(400).send(JSON.stringify({ 
       'message': "Profile Not found" 
      })); 
     } 
    }); 
}; 

现在我至少有100之类的函数,这些在我的应用程序,而不是res.sendStatus(500),每一次写作,我想创建这样一个功能。

var sendError = function(err, res, next) { 
    if (err) { 
     res.status(500).send(JSON.stringify({ 
      'message': "Internal server error. Couldn't connect to database. Please report this issue and try again" 
     })); 
     next(); 
    } 
}; 

并为每个数据库调用。如果(err)sendError(err,res,next);不工作,不知何故,我觉得它是不正确的。那么这种情况下的最佳做法是什么?

回答

1

您可以使用Express.errorHandler来达到此目的。它在Express documentation中描述。

+0

Express.errorHandler是一个快速函数,因为它没有在上面给出的文档页面的链接中给出。 –

+0

这是有关Express中错误处理工作流程的文档。 具有4个参数的函数调用错误处理程序,如果在路由中调用next()并将“err”传递给它,那么执行流将赋予此函数。 –

+0

好吧,那么你的意思是说,如果我给下一个(犯错);在上面的函数中,而不是res.sendStatus(500);并编写一个函数'app.use(function(err,req,res,next){res.status(500).send('Something broke!');})'它会工作吗? –