我正在尝试运行一个简单的应用程序。我有一个Express后端,在访问时会返回JSON字符串localhost:4201/ticker。当我运行服务器并通过AngularService向该链接发出请求时http,出现以下错误:
localhost:4201/ticker
http
XMLHttpRequest无法加载localhost:4201/ticker。跨源请求仅支持以下协议方案:http,数据,chrome,chrome扩展名,https。
,该cors模块与我的Express服务器一起使用。但是,我仍然收到如上所述的错误。部分代码如下:
cors
服务器代码:
private constructor(baseUrl: string, port: number) { this._baseUrl = baseUrl; this._port = port; this._express = Express(); this._express.use(Cors()); this._handlers = {}; this._hInstance = new Handlers(); this.initHandlers(); this.initExpress(); } private initHandlers(): void { // define all the routes here and map to handlers this._handlers['ticker'] = this._hInstance.ticker; } private initExpress(): void { Object.keys(this._handlers) .forEach((key) => { this._express.route(this._url(key)) .get(this._handlers[key]); }); } private _url(k: string): string { return '/' + k; }
这是处理程序函数:
ticker(req: Request, res: Response): void { Handlers._poloniex .getTicker() .then((d) => { return Filters.tickerFilter(d, Handlers._poloniex.getBases()); }) .then((fdata) => { //res.header('Access-Control-Allow-Origin', "*"); //res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header('Content-Type', 'application/json'); res.send(JSON.stringify(fdata)); }) .catch((err) => { this._logger.log([ 'Error: ' + err.toString(), 'File: ' + 'handlers.class.ts', 'Method: ' + 'ticker' ], true); }); }
这是我的Angular服务:
export class LiveTickerService { private _baseUrl: string; private _endpoints: {[key:string]: string}; constructor( private _http: Http ) { this._baseUrl = 'localhost:4201/'; this._endpoints = { 'ticker': 'ticker' }; } getTickerData(): Observable<Response> { return this._http.get(this._baseUrl + this._endpoints['ticker']) .map(resp => resp.json()) } }
这是我使用服务的方式:
getTicker() { let a = new Array<{[key: string]: any}>(); this._tickerService.getTickerData() .subscribe( data => { let parsed = JSON.parse(JSON.stringify(data)); Object.keys(parsed) .forEach((k) => { a.push({k: parsed[k]}); }); this.data = a; }, error => console.log(error.toString()), () => console.log('Finished fetching ticker data') ); return this.data; }
每当您看到“仅支持协议方案”消息时,几乎可以肯定地说这意味着您只是忘记了将https或http放在代码中的请求URL上。
https
因此,在这种情况下,解决方法是http://localhost:4201/ticker在代码中使用以下网址:
http://localhost:4201/ticker
this._baseUrl = 'http://localhost:4201/';
…因为没有http://那里,localhost:4201/ticker所以您输入的网址确实不是。
http://