Javascript 捕获(失败)网络::错误名称未在余烬/余烬数据应用程序中解析

Javascript 捕获(失败)网络::错误名称未在余烬/余烬数据应用程序中解析,javascript,node.js,ember.js,ember-data,Javascript,Node.js,Ember.js,Ember Data,我正在开发一个使用余烬数据的余烬应用程序。我们主要使用Rails和Postgres作为后端,但我们的一小部分数据存储在WordPress后端。WordPress正在wp.example.com上运行 Ember Data设置为与Rails和WordPress后端一起使用,因此我可以执行以下操作: // Get WordPress category by slug this.store.query('wordpress/category', { slug }).then((models) =>

我正在开发一个使用余烬数据的余烬应用程序。我们主要使用Rails和Postgres作为后端,但我们的一小部分数据存储在WordPress后端。WordPress正在
wp.example.com
上运行

Ember Data设置为与Rails和WordPress后端一起使用,因此我可以执行以下操作:

// Get WordPress category by slug
this.store.query('wordpress/category', { slug }).then((models) => {
  // Leave page if no category was found
  if (typeof models.get('firstObject') == 'undefined') this.transitionTo('backupRoute');

  return models.get('firstObject');
});
现在,我想知道如果
wp
子域脱机,如何捕获错误

当我更改WordPress后端URL时(我不确定这是否是模拟失败的最佳方式),几秒钟后,我在Chrome DevTools中得到
(失败)net::ERR_NAME_not_RESOLVED
,余烬显示错误500。相反,我想捕捉网络错误并做一些有用的事情,在本例中,重定向

有没有办法抓住这些错误?添加一个简单的
catch()
会完全破坏页面。当有一个挂起的请求时,它保持白色大约两分钟,然后显示502坏网关。我在日志中也看到了这一点:

my_service_1 | (node:1) UnhandledPromiseRejectionWarning: [object Object]
my_service_1 | (node:1) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 13)

这个问题出现在今天的第二集的节目中

这些代码示例来自一个Octane风格的应用程序,具有Octane语法,但这些功能在旧版本的Ember中也可用

一些内置的余烬功能将在这里帮助您:以及错误事件

首先,您需要抛出错误。然后,您需要添加一个错误操作,并说明发生错误时应该发生什么。当您的请求出错时,错误事件会自动触发,您可以将转换代码放在那里。错误事件处理是Ember routes的一项功能

从“@ember/routing/Route”导入路由;
从'@ember/service'导入{injectasservice};
从'@ember/object'导入{action};
导出默认类ArticleSoServiceRoute扩展路由{
@服务商店;
模型(参数){
返回this.store.query('wordpress/category',{slug})。然后((models)=>{
if(typeof models.get('firstObject')=='undefined'){
抛出新错误(“抱歉,出现问题”)
};
});
}
@行动
错误(错误,转换){
this.transition('backrubute'))
}
};
或者,如果您的目标是显示错误页面,您可以做一些更简单的事情。使用以下命令创建错误模板:
ember g template error
。这将创建一个模板文件,
app/templates/error.hbs
。在模板中放入一些文本,比如“oops!”,这样在模板工作后就可以看到它了

您仍然需要抛出错误,以便Ember能够注意到它,但您不再需要错误操作。Ember将自动路由到错误模板

导出默认类articlesovervewroute扩展路由{
@服务商店;
模型(参数){
返回this.store.query('wordpress/category',{slug})。然后((models)=>{
if(typeof models.get('firstObject')=='undefined'){
抛出新错误(“抱歉,出现问题”)
};
});
}
};

错误模板可以存在于许多不同的路径上。指南有所有的细节,但一般来说,你可以把它们放在你的路线文件夹中,比如
some route/error.hbs
,或者你也可以把它们放在应用程序的根目录中,就像我们在
ember g template error

中所做的那样。这一问题在今天的一集中特别提到

这些代码示例来自一个Octane风格的应用程序,具有Octane语法,但这些功能在旧版本的Ember中也可用

一些内置的余烬功能将在这里帮助您:以及错误事件

首先,您需要抛出错误。然后,您需要添加一个错误操作,并说明发生错误时应该发生什么。当您的请求出错时,错误事件会自动触发,您可以将转换代码放在那里。错误事件处理是Ember routes的一项功能

从“@ember/routing/Route”导入路由;
从'@ember/service'导入{injectasservice};
从'@ember/object'导入{action};
导出默认类ArticleSoServiceRoute扩展路由{
@服务商店;
模型(参数){
返回this.store.query('wordpress/category',{slug})。然后((models)=>{
if(typeof models.get('firstObject')=='undefined'){
抛出新错误(“抱歉,出现问题”)
};
});
}
@行动
错误(错误,转换){
this.transition('backrubute'))
}
};
或者,如果您的目标是显示错误页面,您可以做一些更简单的事情。使用以下命令创建错误模板:
ember g template error
。这将创建一个模板文件,
app/templates/error.hbs
。在模板中放入一些文本,比如“oops!”,这样在模板工作后就可以看到它了

您仍然需要抛出错误,以便Ember能够注意到它,但您不再需要错误操作。Ember将自动路由到错误模板

导出默认类articlesovervewroute扩展路由{
@服务商店;
模型(参数){
返回this.store.query('wordpress/category',{slug})。然后((models)=>{
if(typeof models.get('firstObject')=='undefined'){
抛出新错误(“抱歉,出现问题”)
};
});
}
};

错误模板可以存在于许多不同的路径上。指南有所有的细节,但一般来说,你可以把它们放在你的路线文件夹中,比如
一些路线/错误.hbs
,或者你可以把它们放在应用程序的根目录中,就像我们用
ember g template error

非常感谢你的努力!我应该在我的问题中更加明确:我提到的Ember显示的错误是一个应用程序级错误模板。错误操作正是我需要的。不客气!很高兴这对你有帮助。非常感谢你的努力!我应该在我的问题中更加明确:我提到的Ember显示的错误是一个应用程序级错误模板。错误行为