Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 Meteor.Error在抛出到客户端时是否更改?_Javascript_Node.js_Meteor_Callback - Fatal编程技术网

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。