无法在数字'1'上创建属性'route'



使用 RestAPI,我尝试通过这些简单的代码从数据库中删除一条记录。

import { Component } from '@angular/core';
import { RestangularModule, Restangular } from 'ngx-restangular'; 
import { HomePage } from '../pages/home/home';
@Component({
templateUrl: 'app.html'
})
export class MyApp {
rootPage:any = HomePage;
constructor(private restangular: Restangular) {
this.restangular.one('v1/my_products', '5b3621ce1dbaba5598cdbe08')
.get()
.subscribe((res: any) => {
res.data.remove();
})
}
}

奇怪的是,文档已成功删除,但我总是收到以下错误,并且我的应用程序已关闭

> ERROR TypeError: Cannot create property 'route' on number '1'
at restangularizeBase (ngx-restangular.js:54)
at restangularizeElem (ngx-restangular.js:184)
at SafeSubscriber.okCallback [as _next] (ngx-restangular.js:360)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:238)
at SafeSubscriber.next (Subscriber.js:185)
at Subscriber._next (Subscriber.js:125)
at Subscriber.next (Subscriber.js:89)
at CatchSubscriber.Subscriber._next (Subscriber.js:125)
at CatchSubscriber.Subscriber.next (Subscriber.js:89)
at MapSubscriber._next (map.js:83)

Package.json

{
"dependencies": {
"@angular/animations": "5.0.1",
"@angular/common": "5.0.1",
"@angular/compiler": "5.0.1",
"@angular/compiler-cli": "5.0.1",
"@angular/core": "5.0.1",
"@angular/forms": "5.0.1",
"@angular/http": "5.0.1",
"@angular/platform-browser": "5.0.1",
"@angular/platform-browser-dynamic": "5.0.1",
"@ionic-native/core": "4.8.0",
"@ionic-native/splash-screen": "4.8.0",
"@ionic-native/status-bar": "4.8.0",
"@ionic/storage": "2.1.3",
"core-js": "^2.5.7",
"ionic-angular": "3.9.2",
"ionicons": "3.0.0",
"ngx-restangular": "2.0.1",
"rxjs": "5.4.3",
"sw-toolbox": "3.6.0",
"zone.js": "0.8.26"
},
"devDependencies": {
"@ionic/app-scripts": "3.1.10",
"typescript": "~2.6.2"
}
}

与 ngx-restangular@1.0.13 - 3.0.0 的情况相同

怎么了?

我不知道这是否是最好的解决方案。但是,我刚刚找到了解决此问题的解决方案。

RestangularProvider.addResponseInterceptor((data, operation, what, url, response) => 
{
switch (operation) {
case 'post':
case 'put':
case 'remove':
if (!data)
return {};
default: {
if (typeof data === 'number') { return {} }
if (typeof data === 'object') { return data }
}
}
});

向@jlcj致敬

这是@jlcj答案的延伸,也是我迄今为止找到的最佳解决方案。

我的应用程序正在运行 ngx-restangular v5.0.0

Restangular 需要一个对象作为后端服务器的响应。因此,如果您希望从后端服务器返回一个数字,则必须将数据包装在大括号 { data } 中作为对象。否则,将出现错误"无法在编号 1 上创建属性路由"。

RestangularProvider.addResponseInterceptor((data, operation, what, url, response) =>
{
switch (operation) {
case 'post':      
case 'put':
case 'remove':
if (!data)
return {};
default: {
if (typeof data === 'number') { return { data } }
if (typeof data === 'object') { return data }
}
}
});

最新更新