RSA*_*min 3 javascript error-handling node.js sails.js
我是Sails.js(0.9.13)和节点样式编程的新手.任何帮助赞赏.以下示例来自UserController:
module.exports = {
save: function (req, res) {
var u = {
firstName: req.param('firstName'),
lastName: req.param('lastName'),
email: req.param('email'),
password: req.param('password'),
};
User.create(u).done(function(err,user){
if(err) {
if( err.code == 'ER_DUP_ENTRY' ) {
return new Error('Duplicate: email address already in use.','UserController');
}
console.log( err );
return;
}
console.log( user );
});
}
}
Run Code Online (Sandbox Code Playgroud)
所以我试图捕获'ER_DUP_ENTRY'错误代码并返回自定义错误消息,但我写的没有运气.我该怎么做呢?
sgr*_*454 12
如果您打算将错误返回给客户端,可以采用多种方法,但所有方法都以作为参数传递给控制器操作的res
对象开始.所有最新版本的Sails都会在该对象中添加一些基本的错误响应,因此您可以这样做(例如):
res.serverError(err)
Run Code Online (Sandbox Code Playgroud)
而不是return new Error
显示具有500状态代码的一般错误页面.对于不期望HTML的仅JSON API调用,它将发送一个带有状态代码和错误的简单对象.还有:
res.notFound() // 404 response
res.forbidden() // 403 response
res.badRequest() // 400 response
Run Code Online (Sandbox Code Playgroud)
对于"重复输入"错误,您可能需要更多自定义的内容.由于您的示例来自表单帖子,因此最佳做法是将错误实际保存为Flash消息并重定向回表单页面,例如:
req.flash('error', 'Duplicate email address');
return res.redirect('/theView');
Run Code Online (Sandbox Code Playgroud)
然后在表单视图中,使用以下内容显示错误:
<% if (req.session.flash && req.session.flash.error) { %><%=req.flash('error')%><% } %>
Run Code Online (Sandbox Code Playgroud)
或者,您可以从控制器中显示自定义错误视图:
return res.view('duplicateEmail');
Run Code Online (Sandbox Code Playgroud)
如果您正在响应API调用,则需要发送状态代码和(可能)JSON对象:
return res.json(409, {error: 'Email address in use'});
Run Code Online (Sandbox Code Playgroud)
关键是,Error
您希望使用该res
对象以某种方式响应请求,而不是在控制器代码中返回(或抛出)对象.
归档时间: |
|
查看次数: |
8343 次 |
最近记录: |