next() 承诺错误处理
next() promise error handling
错误处理的最佳方式是什么?
我需要自定义 json 错误消息。这是一个 API.
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
return res.status(201).json({message: 'Curso atualizado.', data: data});
})
.catch(function(error) {
return res.status(500).json({message: 'ERROR!'});
//OR return next(error); but I need custom json error messages so it doesn't make sense
})
.finally(next); //OR return next(error)? redundant?
};
考虑 Curso
猫鼬文档
你可以这样做
req.curso.save(function(err,data){
if(err) res.status(500).json({message: 'ERROR!'});
else res.status(201).json({message: 'Curso atualizado.', data: data})
});
编辑:如果你的小节点应用程序中有很多类似的问题,值得一看 rb,那么你可以像
那样做
var RB = require('rb');
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
// the below line could have been written in some middleware (eg middleware provided by express.io), so we do get clear code in controller part.
res.RB = RB.build(res, { // you may customize your builder yours way, after looking into `rb` docs
errorStatus : 500, successStatus : 201,
errorKey : false, successKey : 'data',
preProcessError : function(){ return { message : 'ERROR!' } },
addToSuccess : { message : 'Curso atualizado.' }
});
//Now only one line in controller
req.curso.save(res.RB.all);
};
披露:我是 rb
.
的作者
asCallback
接受一个回调,它使用映射到回调约定的承诺结果调用:
如果 promise 被拒绝,它将以错误作为第一个参数调用回调:cb(error)
如果 promise 得到满足,它会调用回调,并将值作为第二个参数:cb(null, value)
.
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
return res.status(201).json({message: 'Curso atualizado.', data: data});
})
.catch(function(error) {
return res.status(500).json({message: 'ERROR!'});
//OR return next(error); but I need custom json error messages so it doesn't make sense
})
.asCallback(next);
};
我不是猫鼬,但我对 express 和 promise 了解一两件事
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
res.status(201).json({message: 'Curso atualizado.', data: data});
}, function(error){
res.status(500).json({message: 'ERROR!'});
})
};
这基本上就是您所需要的。根据实现,这可能是一条正常的路由,因为它总是 return 到客户端的东西 (res.json
)。因此,您不必调用 next
因为它是为了让中间件调用
此外,您不必 return 任何东西,因为当您调用 res.json 时,它基本上表示此请求到此结束,没有其他。
最后但同样重要的是,根据规范,promise then
支持 2 个功能,第一个用于处理成功案例,第二个用于处理异常。所以,你不必打电话给 catch
错误处理的最佳方式是什么? 我需要自定义 json 错误消息。这是一个 API.
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
return res.status(201).json({message: 'Curso atualizado.', data: data});
})
.catch(function(error) {
return res.status(500).json({message: 'ERROR!'});
//OR return next(error); but I need custom json error messages so it doesn't make sense
})
.finally(next); //OR return next(error)? redundant?
};
考虑 Curso
猫鼬文档
你可以这样做
req.curso.save(function(err,data){
if(err) res.status(500).json({message: 'ERROR!'});
else res.status(201).json({message: 'Curso atualizado.', data: data})
});
编辑:如果你的小节点应用程序中有很多类似的问题,值得一看 rb,那么你可以像
那样做var RB = require('rb');
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
// the below line could have been written in some middleware (eg middleware provided by express.io), so we do get clear code in controller part.
res.RB = RB.build(res, { // you may customize your builder yours way, after looking into `rb` docs
errorStatus : 500, successStatus : 201,
errorKey : false, successKey : 'data',
preProcessError : function(){ return { message : 'ERROR!' } },
addToSuccess : { message : 'Curso atualizado.' }
});
//Now only one line in controller
req.curso.save(res.RB.all);
};
披露:我是 rb
.
asCallback
接受一个回调,它使用映射到回调约定的承诺结果调用:
如果 promise 被拒绝,它将以错误作为第一个参数调用回调:cb(error)
如果 promise 得到满足,它会调用回调,并将值作为第二个参数:cb(null, value)
.
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
return res.status(201).json({message: 'Curso atualizado.', data: data});
})
.catch(function(error) {
return res.status(500).json({message: 'ERROR!'});
//OR return next(error); but I need custom json error messages so it doesn't make sense
})
.asCallback(next);
};
我不是猫鼬,但我对 express 和 promise 了解一两件事
exports.putCurso = function (req, res, next) {
util.updateDocument(req.curso, Curso, req.body);
req.curso.saveAsync()
.then(function (data) {
res.status(201).json({message: 'Curso atualizado.', data: data});
}, function(error){
res.status(500).json({message: 'ERROR!'});
})
};
这基本上就是您所需要的。根据实现,这可能是一条正常的路由,因为它总是 return 到客户端的东西 (res.json
)。因此,您不必调用 next
因为它是为了让中间件调用
此外,您不必 return 任何东西,因为当您调用 res.json 时,它基本上表示此请求到此结束,没有其他。
最后但同样重要的是,根据规范,promise then
支持 2 个功能,第一个用于处理成功案例,第二个用于处理异常。所以,你不必打电话给 catch