Javascript Meteor.Error在抛出到客户端时是否更改?
我有这个:Javascript Meteor.Error在抛出到客户端时是否更改?,javascript,node.js,meteor,callback,Javascript,Node.js,Meteor,Callback,我有这个: Meteor.methods({ 'foo'() { try{ ...//some http.get } catch (e) { console.log(e); //-> { [Error: ETIMEDOUT] code: 'ETIMEDOUT', connect: true } if(e.code === 'ETIMEDOUT') { throw e; } } } }); 所以现在我是客户: Meteo
Meteor.methods({
'foo'() {
try{
...//some http.get
} catch (e) {
console.log(e); //-> { [Error: ETIMEDOUT] code: 'ETIMEDOUT', connect: true }
if(e.code === 'ETIMEDOUT') { throw e; }
}
}
});
所以现在我是客户:
Meteor.call('foo', function(error, result) {
if(error){
if(error.code === 'ETIMEDOUT') {
//this block is never reached.. why?
}
}
}
但似乎error.code与服务器上的不同(似乎已更改为内部服务器错误)。为什么会这样?更重要的是,如何获取原始(在本例中为超时)错误?来自:
当您遇到不需要向客户报告的错误时,
但是在服务器内部,抛出一个常规JavaScript错误
对象这将以完全不透明的方式向客户报告
没有详细信息的内部服务器错误
这就是你看到的。相反:
当服务器无法完成用户所需的操作时
由于已知条件,您应该抛出一个
将Meteor.Error对象发送到客户端。
错误有三个参数:错误、原因和细节
所以你可以这样做:
if (e.code === 'ETIMEDOUT') {
let userMessage = 'The remote call timed out.';
let detail = `${userMessage}: ${JSON.stringify(e)}`;
console.error(detail);
throw new Meteor.Error('remote-call-timed-out', userMessage, detail);
}
第一个参数是“error”(我称之为“code”),您可以在客户端上对其进行编程,以执行特定操作或国际化用户消息。这就是我们在系统中所做的。(如果找不到代码,则显示userMessage)。详细信息将写入服务器日志并放入浏览器控制台.log中。来自:
当您遇到不需要向客户报告的错误时,
但是在服务器内部,抛出一个常规JavaScript错误
对象这将以完全不透明的方式向客户报告
没有详细信息的内部服务器错误
这就是你看到的。相反:
当服务器无法完成用户所需的操作时
由于已知条件,您应该抛出一个
将Meteor.Error对象发送到客户端。
错误有三个参数:错误、原因和细节
所以你可以这样做:
if (e.code === 'ETIMEDOUT') {
let userMessage = 'The remote call timed out.';
let detail = `${userMessage}: ${JSON.stringify(e)}`;
console.error(detail);
throw new Meteor.Error('remote-call-timed-out', userMessage, detail);
}
第一个参数是“error”(我称之为“code”),您可以在客户端上对其进行编程,以执行特定操作或国际化用户消息。这就是我们在系统中所做的。(如果找不到代码,则显示userMessage)。详细信息将写入服务器日志并放入浏览器控制台.log。在第二个块中,您有输入错误-
ETIMEDOUD
。是吗?不幸的是不是,这是个打字错误。但无论如何thx(已修复)。在foo()方法中,您有一个赋值,而不是compare('='),顺便说一句。这不会导致您的问题,但请检查您的实际代码。该死的是(星期一…)thx。在第二个块中,您有输入错误-ETIMEDOUD
。是吗?不幸的是不是,这是个打字错误。但是无论如何thx(已修复)。在foo()方法中,您有一个赋值,而不是compare('='),顺便说一句。这不会导致您的问题,但请检查您的实际代码。该死的是(星期一…)thx。