Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.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 如果statusCode不是200,则从http调用中返回什么类型的错误对象?_Javascript_Node.js_Api_Meteor_Error Handling - Fatal编程技术网

Javascript 如果statusCode不是200,则从http调用中返回什么类型的错误对象?

Javascript 如果statusCode不是200,则从http调用中返回什么类型的错误对象?,javascript,node.js,api,meteor,error-handling,Javascript,Node.js,Api,Meteor,Error Handling,我正在meteor中使用npm“请求”包进行http调用 我想知道当response.statusCode不等于200时,会创建什么类型的错误对象?这是否由javascript引擎处理并被视为运行时错误 或者,如果statusCode不等于200,则由服务提供商决定是否创建错误对象 如果是后者,我是否会创建一个“手动错误”new error(“抛出我自己的错误以供catch块处理”) 对于我的场景,我希望确保catch(e)块将捕获此错误,并且我希望添加我自己的消息,包括堆栈跟踪。您不必使用tr

我正在meteor中使用npm“请求”包进行http调用

我想知道当response.statusCode不等于200时,会创建什么类型的错误对象?这是否由javascript引擎处理并被视为运行时错误

或者,如果statusCode不等于200,则由服务提供商决定是否创建错误对象

如果是后者,我是否会创建一个“手动错误”
new error(“抛出我自己的错误以供catch块处理”)


对于我的场景,我希望确保catch(e)块将捕获此错误,并且我希望添加我自己的消息,包括堆栈跟踪。

您不必使用
try..catch
,除非操作使用同步代码(例如使用
http.get
使用meteor http包发出请求)

错误代码通常由其他服务器返回。200表示没问题。有一个错误代码及其含义

因此,状态代码将由
error
对象中的回调返回,但不会被
catch
捕获,除非像您提到的那样使用
throw
抛出

在javascript中,问题是当存在带有error参数的回调时,如果有意义的话,它实际上不会抛出可以从原始函数触发的位置捕获的错误(您拥有的
request()
方法)

即使在回调中使用
throw
,它也不会被
catch
捕获。这是因为回调是作为一个全新的事件触发的。如果要使用
catch
技术,则需要同步javascript。即使用http包

meteor add http
然后代码:

try {
    var result = HTTP.get("<url>")
    result.content //this will contain the response
}catch(e) {
    the `e` object will contain the error (if the status code is not 200)
}
您可以抛出
新错误
新流星。错误
。区别在于Meteor.Error也会将错误发送到客户端,作为
err
回调的一部分,如果代码段正在使用
Meteor.call从客户端调用的方法运行,例如

Meteor.call("something", function(err, result) {
    if(err) alert(err.reason);
});
如果这样调用类似以下的方法:

Meteor.methods({
    something: function() {
        throw new Meteor.Error(500, "This is the message");
    }
});
客户端将显示一个消息框,说明
这是消息
,作为
错误原因
。如果抛出
新错误(..
它将不会将消息发送到客户端,而是
内部服务器错误
而不是
这是消息


在该方法中,您可以使用请求url的代码。如果它在其中抛出一个错误,它将弹出堆栈并找到到客户端的方法。

记住XMLHttpRequest是异步的,如果出现错误,您将触发错误回调,并且
this
与请求相同。我还应该添加,我已经使用了future使我的函数看起来是同步的。然后,我一个接一个地运行函数,将返回结果从上一个函数传递到下一个函数。从技术上讲,我不是使用回调函数,而是简单地将结果从一个函数传递到下一个函数。处理错误的好做法是什么?我前面的问题用try/ca演示了这一点tch但我没有使用回调…我“返回未来。返回(resultObj)”感谢您指出Meteor.Error,因为我的函数是在Meteor.call/method中执行的。因此,我想将错误传递给客户端。@CodeCandy是的,我认为这是最好的方法。使用futures/Meteor.wrapAsync说明了同样的问题,因为它会在触发错误时抛出错误。抛出的好处是停止这是我的问题的最后一个扩展,为什么“throw”在我的代码中是一个意外的标记?。“return future.return(throw new Meteor.Error(”请求不是一个200响应“);@CodeCandy您不必返回错误,可以自己抛出它。
抛出新的Meteor.error(500,“error”);返回future.return(null)
Meteor.call("something", function(err, result) {
    if(err) alert(err.reason);
});
Meteor.methods({
    something: function() {
        throw new Meteor.Error(500, "This is the message");
    }
});