在Angular 2

时间:2016-03-12 23:02:56

标签: angular rest typescript

我想使用以角度2在另一台服务器上运行的REST api。

documentation they provide an example如何使用observables进行操作:

import {Injectable}     from 'angular2/core';
import {Http, Response} from 'angular2/http';
import {Hero}           from './hero';
import {Observable}     from 'rxjs/Observable';

@Injectable()
export class HeroService {
  constructor (private http: Http) {}

  private _heroesUrl = 'http://someserver:8080/heroes';  // URL to external web api

  getHeroes () {
    return this.http.get(this._heroesUrl)
                    .map(res => <Hero[]> res.json().data)
                    .catch(this.handleError);
  }
  private handleError (error: Response) {
    // in a real world app, we may send the error to some remote logging infrastructure
    // instead of just logging it to the console
    console.error(error);
    return Observable.throw(error.json().error || 'Server error');
  }
}

请注意,我刚刚更改了_heroesUrl以使用外部API,其余部分与文档中完全相同。

不幸的是,它会给我一个错误:

EXCEPTION: TypeError: this.http.get(...).map is not a function in [null]

很明显,它无法获得任何数据。如何操作http标头以便处理CORS请求?

修改1

  • 我通过在后端相应地设置标题来解决CORS问题。
  • 我添加了map&amp;的导入观测:

    import&#39; rxjs / add / operator / map&#39; 导入&#39; rxjs / Rx&#39;;

现在前一个错误消失了,但是在我的控制台中弹出了一个新错误:

Uncaught (in promise) TypeError: object is not a constructor(…) [undefined:1]

当我点击异常以查看它在chrome dev控制台中的来源时,它会打开一个新的空标签...现在卡在这里

1 个答案:

答案 0 :(得分:2)

与Angular中的CORS无关。 CORS纯粹是服务器&lt; - &gt;浏览器的事。如果您请求真正执行以及响应是什么,请检入网络控制台。如果它被浏览器阻止。然后,您需要修改服务器以启用CORS支持。