Javascript 如果statusCode不是200,则从http调用中返回什么类型的错误对象?
我正在meteor中使用npm“请求”包进行http调用 我想知道当response.statusCode不等于200时,会创建什么类型的错误对象?这是否由javascript引擎处理并被视为运行时错误 或者,如果statusCode不等于200,则由服务提供商决定是否创建错误对象 如果是后者,我是否会创建一个“手动错误”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
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");
}
});