2016-10-10 64 views
0

我应该在POST请求中使用表达式错误处理中间件函数来处理缺少字段的情况吗?什么时候在NODE中使用错误中间件功能

function (req, res, next) { 

    if (!req.body.mandatoryField){ 
     var err = new Error("missing field); 
     err.status(400); 
     next(err); // send response from error middleware 
    } 

} 

或者我应该将它保存为catually抛出异常情况:

model.save(function(err){ 
    next(err); 
} 

换句话说,是扔坏输入错误在POST请求矫枉过正?

或者我应该直接回应一个400状态响应,而不会引发错误。

回答

0

我不会。我会保存中间件错误处理以将错误发送到日志记录服务。通常情况下,您会拦截一般错误并在继续之前将其记录下来。如果您将其作为中间件来执行,则会拦截每个请求,而这对大多数情况来说都是不必要和脆弱的。

通常,这些验证会在使用jQuery的客户端上发生,这样您就可以保存到db的行程。

这里是我如何使用中间件来处理错误:

//uncaught exception in the application/api, etc. Express will pass the err param. This doesn;t look for specific errors, it will log any general error it sees. 
app.use(function(err, req, res, next) { 
    //send to logging service. 
    next(err); 
}); 
//uncaught exception in Node 
if (process.env.NODE_ENV === 'production' || appConfig.env === 'production') { // [2] 
    process.on('uncaughtException', function(err) { 
     console.error(err.stack); // [3] 
     //log error, send notification, etc 

    }, function(err) { 
     if (err) {console.error(err);} 
     process.exit(1); // [5] 
    }); 
} 
0

这真的取决于你的API的设计和谁将会消耗它。如果您正在编写自己的前端并可以处理HTTP 400错误响应的含义,那么只要让数据库出错就可以简单得多。

如果你想更细化的验证,然后做它在路线(或通过中间件)是要走的路:)

相关问题