我最近一直在探索ngrx(ngrx/store).我在网上研究了一些经典的例子(todo应用程序).很好的例子.现在我想通过让我的ngrx应用程序进行一些API调用来将它提升到一个新的水平.是否有示例或指南如何设置ngrx(redux)应用程序来调用和处理api调用?
我的理解是在我的redux应用程序的上下文中的api调用是副作用(函数式编程范例).我想知道在redux应用程序中如何/在哪里实现API调用.
我在 CORS 场景下访问响应标头时遇到问题。我正在拨打 CORS 电话。因此,我在 API Manager 中配置了 API 配置以接受 CORS 请求(即为我的 REST 端点启用了 CORS)。
但是当我的应用程序(Angular2 应用程序)执行发布请求时,它(http.post)看不到响应标头。我在 Chrome Devtools 中检查了浏览器从远程服务器接收到的内容,结果发现浏览器中收到了所有预期的响应标头。显然,Angular 没有将其传递给我的代码,我无法访问标头。Gunter,建议我检查 CORS 标头
访问控制公开标头
我的问题: 当启用 CORS 时,我可以在哪里告诉 WSO2 API Manager 传递 pass 或设置此标头?我在 api-manager.xml 中尝试过,但重新启动后没有看到预期的标头(在我的例子中为标头“位置”)。
我有一个组件向我的服务请求一个 Observable 对象(也就是说,底层的 http.get 返回一个对象)。
该对象(可观察的)与我的模板中的异步管道结合使用。不幸的是,我收到一个错误:
无法读取 null 的属性“姓氏”
我一直在为这件事伤透脑筋。类似类型的代码可以在对象列表上正确运行(与 *ngFor 结合使用)。
<li>{{(person | async)?.lastname}}</li>
Run Code Online (Sandbox Code Playgroud)
我的服务中的方法:
getPerson(id: string): Observable<Person> {
let url = this.personsUrl + "/" + id;
return this.http.get(url, {headers: new Headers({'Accept':'application/json'})})
.map(r => r.json())
.catch(this.handleError); //error handler
}
Run Code Online (Sandbox Code Playgroud)
在我的组件中:
//... imports omitted
@Component({
moduleId: module.id,
selector: 'app-details-person',
templateUrl: 'details-person.component.html',
styleUrls: ['details-person.component.css'],
})
export class DetailsPersonComponent implements OnInit, OnDestroy
{
person: Observable<Person>;
sub: Subscription;
constructor(private personService: PersonService, private route: ActivatedRoute) {
}
ngOnInit() {
this.sub = this.route.params.subscribe(params => { …Run Code Online (Sandbox Code Playgroud) 我正在调用REST端点.我想添加一个资源(下面).但是,当我的服务调用Http的post方法时,它将调用请求,但不返回响应的标头.至少,我遇到了Response实例的空头对象.(??)我确实希望响应头.特别是我希望Location标头作为"REST ADD RESOURCE"模式的一部分.Location标头包含新创建的资源的URL.
关于这一点的奇怪之处在于:当我直接调用我的API(因此不是通过Angular2)时,我得到了确切的响应,但这次是(所有)预期的头文件,包括Location响应头.
呃,Http.post有什么问题或者我做错了吗?
请注意:我的服务在此示例中返回Observable Response.这不是返回给调用者的预期类类型.我正在使用它是为了方便了解帖子响应发生了什么.实际上,我打算传递存储在Location标头中的url.
addModel(model: any): Observable<Response> {
let token = this.loginService.auth.accessToken;
let headers = new Headers({
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': `Bearer ${token}`
});
let options = new RequestOptions({headers: headers});
let data: string = JSON.stringify(model);
return this.http.post(this.url, data, options)
// .map(r => {
// console.log("Response ", r);
// return r.headers.get("Location"); // THERE IS NOTHING IN headers (?). Don't understand.
// })
.catch(err => Observable.throw(err));
}
Run Code Online (Sandbox Code Playgroud)