我对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 );
});
}
}
所以我想抓住' ER_DUP_ENTRY'错误代码并返回自定义错误消息,但我写的没有运气。我该怎么做呢?
答案 0 :(得分:12)
如果您打算将错误返回给客户端,有几种方法可以使用,但所有这些方法都以res
object开头,该{{3}}作为参数传递给您的控制器操作。所有最新版本的Sails都会在该对象中添加一些基本的错误响应,因此您可以这样做(例如):
res.serverError(err)
而不是return new Error
以显示包含500状态代码的常规错误页面。对于不希望使用HTML的仅限JSON的API调用,它会发送一个包含状态代码和错误的简单对象。还有:
res.notFound() // 404 response
res.forbidden() // 403 response
res.badRequest() // 400 response
对于您的"重复输入"错误,你可能想要更多定制的东西。由于您的示例来自表单帖子,因此最佳做法是将错误实际保存为Flash消息并重定向回表单页面,例如:
req.flash('error', 'Duplicate email address');
return res.redirect('/theView');
然后在表单视图中,使用以下内容显示错误:
<% if (req.session.flash && req.session.flash.error) { %><%=req.flash('error')%><% } %>
作为替代方案,您只需从控制器中显示自定义错误视图:
return res.view('duplicateEmail');
如果您正在回复API调用,那么您将要发送状态代码和(可能)JSON对象:
return res.json(409, {error: 'Email address in use'});
关键是,您希望使用Error
对象以某种方式响应请求,而不是在控制器代码中返回(或抛出)res
对象。