对于POST请求中缺少字段的情况,我是否应该使用表达式处理中间件函数?
function (req, res, next) {
if (!req.body.mandatoryField){
var err = new Error("missing field);
err.status(400);
next(err); // send response from error middleware
}
}
或者我应该将其保存用于导致错误的案例:
model.save(function(err){
next(err);
}
换句话说,在POST请求过度杀戮中输入错误是错误吗?
或者我应该直接回复400状态响应,而不会抛出错误。
答案 0 :(得分:0)
这实际上取决于你的api的设计以及谁会消耗它。如果您正在编写自己的前端并且可以处理HTTP 400错误响应的含义,那么让数据库出错可能会简单得多。
如果您想要更细粒度的验证,那么在路线(或通过中间件)中进行验证是可行的方法:)
答案 1 :(得分:0)
我不会。我会保存中间件错误处理以将错误发送到日志记录服务。通常,您可以拦截一般错误并在继续之前简单地记录它。如果你把它作为一个中间件,你将拦截每个请求,这在大多数情况下是不必要和脆弱的。
通常,使用jQuery在客户端上会发生这种验证,这样就可以节省数据库的访问。
以下是我使用中间件处理错误的方法:
//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]
});
}