gpt4 book ai didi

Angular 2 : multiple HTTP services

转载 作者:太空狗 更新时间:2023-10-29 17:23:39 26 4
gpt4 key购买 nike

我们在我们的项目中使用 Angular 2。到目前为止,我们在开发中的数据服务中使用 in-memory-web-api:

app.module.ts:

imports: [
HttpModule,
InMemoryWebApiModule.forRoot(MockData),
...
]

data.service.ts:

constructor(private http: Http) { }

现在是获取一些真实数据的时候了。但是,我们无法一次全部替换 Mock Data。如何将我的数据服务配置为:

constructor(private fakeHttp: FakeHttp, /* this one use in-memory-api */
private http: Http /* this one goes to real remote server */) { }

所以我们可以随着项目的进展逐渐移出模拟数据?

最佳答案

angular-in-memory-web-api 提供了几个选项,而不是尝试执行这种丑陋的“两个 HTTP”。

从 0.1.3 开始,有配置属性将所有未找到的集合调用转发到常规 XHR。

InMemoryWebApiModule.forRoot(MockData, {
passThruUnknownUrl: true
})

这将做的是将它找不到集合的任何请求转发到真正的 XHR。因此,一种选择是根据需要逐渐从内存数据库中删除集合。

class MockData implements InMemoryDbService {
createDb() {
let cats = [];
let dogs = [];
return {
cats,
// dogs
};
}
}

从数据库中删除 dogs 集合后,内存中现在会将所有狗请求转发到真实后端。

这只是集合级别的修复。但如果您需要更精细的控制,您可以使用方法拦截器。

在你的MockData类中,假设你想覆盖get方法,只需将它添加到MockData类中,使用 >HttpMethodInterceptorArgs 参数。

class MockData implements InMemoryDbService {
get(args: HttpMethodInterceptorArgs) {
// do what you will here
}
}

HttpMethodInterceptorArgs 的结构如下(只是让您了解可以用它做什么)

HttpMethodInterceptorArgs: {
requestInfo: {
req: Request (original request object)
base
collection
collectionName
headers
id
query
resourceUrl
}
passThruBackend: {
The Original XHRBackend (in most cases)
}
config: {
this is the configuration object you pass to the module.forRoot
}
db: {
this is the object from creatDb
}
}

举个例子,如果你只是转发所有的get请求,它会是什么样子

get(args: HttpMethodInterceptorArgs) {
return args.passthroughBackend.createConnection(args.requstInfo.req).response
}

关于 Angular 2 : multiple HTTP services,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39855221/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com