Я получаю эту ошибку:
XMLHttpRequest не может загрузить https://heroku-app-php.herokuapp.com/. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». ПроисхождениеHTTP: // локальный: 8100Поэтому не допускается доступ.
test.service.ts
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
@Injectable()
export class testService {
constructor (
private http: Http
) {}
getUser() {
var tries = this.http.get(`https://heroku-app-php.herokuapp.com/`)
.map((res:Response) => res.json());
console.log("Res done");
return tries;
}
}
test.component.ts
import { Component } from '@angular/core';
import { testService } from './test.service';
@Component({
selector: 'home-page',
template: `
<div>
<button (click)="loadUser()">Load profile</button>
{{ profile | json }}
</div>
`
})
export class testComponent {
constructor(private testService: testService) {}
profile = {};
loadUser() {
this.testService.getUser().subscribe(data => this.profile = data);
}
}
По умолчанию ни одна сторона сервера не разрешает запросы от внешних доменов, вам следует включить cors. Прочитайте эту статью.
https://enable-cors.org/server_expressjs.html
И помните, что cors включается, прежде чем передать что-либо app.use
,
Вам нужно добавить ‘withCredentials’ в качестве заголовка запроса.
Что-то вроде :
this.http.get(`https://heroku-app-php.herokuapp.com/`,{ 'withCredentials': true})
Подробнее об этом вы можете прочитать Вот
Это происходит, когда приложение работает не на сервере, а на другом сервере.
Я предполагаю, что вы пытаетесь сделать запрос API во время работы на локальном компьютере с помощью ng serve
, Это, однако, будет прекрасно работать, когда код загружен на тот же сервер, что и внутренний API.
https://github.com/angular/angular-cli/issues/2872
На данный момент есть билет для обеспечения поддержки CORS через Angular-cli, но до тех пор вы можете это исправить, используя обратный прокси или промежуточное ПО для прокси, чтобы обойти это.