Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Sails.js中引发自定义错误消息_Javascript_Node.js_Error Handling_Sails.js - Fatal编程技术网

Javascript 如何在Sails.js中引发自定义错误消息

Javascript 如何在Sails.js中引发自定义错误消息,javascript,node.js,error-handling,sails.js,Javascript,Node.js,Error Handling,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: re

我对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 );
        });
   }
}
return res.view('duplicateEmail');

因此,我试图捕获“ER_DUP_ENTRY”错误代码并返回一条自定义错误消息,但我在编写时运气不佳。我到底应该怎么做

如果您打算将错误返回给客户端,有几种方法,但都是从作为参数传递给控制器操作的开始。所有最新版本的SAIL都有一些基本的错误响应烘焙到该对象中,因此您可以执行以下操作(例如):

而不是
返回新错误
,以显示带有500状态代码的常规错误页面。对于不需要HTML的仅JSON API调用,它将发送一个包含状态代码和错误的简单对象。还有:

res.notFound() // 404 response
res.forbidden() // 403 response
res.badRequest() // 400 response
对于“重复输入”错误,您可能需要更定制的内容。由于您的示例来自表单帖子,因此最佳做法是将错误实际保存为flash消息,并重定向回表单页面,例如:

res.serverError(err)
req.flash('error', 'Duplicate email address');
return res.redirect('/theView');
然后在表单视图中,使用以下方式显示错误:

<% if (req.session.flash && req.session.flash.error) { %><%=req.flash('error')%><% } %>
如果您正在响应API调用,则需要发送状态代码和(可能)JSON对象:

return res.json(409, {error: 'Email address in use'});

关键是,您不想在控制器代码中返回(或抛出)一个
错误
对象,而是想使用
res
对象以某种方式响应请求。

此代码在什么条件下运行?它是响应常规HTML表单post、AJAX post、API消费者的请求还是其他什么?这将决定您应该发送的响应类型。此外,我希望您不是真正从Sails 0.9.0开始。最新的稳定版本是0.9.13。是时候升级了@是的,最新航次是0.9.13。这是在th UserController中运行的,作为对直接向上表单帖子的响应。我的问题实际上是关于如何检测和或拦截create函数的ER_DUP_条目,以便打包适当的回复。然后,是的,所述响应的打包需要与调用类型相适应。@RSAdmin您知道User中是否可以访问“ER\u DUP\u ENTRY”。findOrCreate()我一直得到一个ER\u UKNOWN,但在进一步读取它时,由于重复的条目编辑而清除了它:或者我完全错了,而ER_DUP_条目来自sails mysql,而不是sails内存……这正是我所寻求的答案。谢谢你,斯科特。(一个问题:在示例代码中这是否正确:
?同一行上的另一个参考查看
req.session.flash.error
…是--实际调用
req.flash('error'))
将检索并清除flash消息,而访问
req.session.flash.error
只是检查它是否存在。它不应该
返回res.json({error:'Email address in use'},409);
指定
res.json(obj[,headers | status[,status]]
@ScottGress给定的示例似乎失败,在v0.10.0-rc8中出现了一个
无法读取未定义的
属性“error”。您可以建议另一种方法来检查是否存在错误吗?谢谢!@dbasch很好,该示例没有先检查
req.session.flash
。现在更新。您可以通过从控制器并设置
flash
local,如
res.view({flash:req.flash()})
,然后只执行
,但如果您的路线直接指向视图,则这是不可能的。