У меня есть приложение Angular2, которое пытается позвонить на мой сервер Django.Angular2 http.get (url) возвращает 404 на действительном URL-адресе - не проблема CORS
У меня есть функция getObjects, которая вызывает внешний вызов API и должна возвращать список объектов. В качестве немного отладки я в настоящее время делаю XMLHttpRequest, который правильно захватывает данные с моего сервера.
Однако, когда я пытаюсь сделать запрос с использованием Http.http.get (url), я вижу ошибку 404. Я пробовал работать с несколькими заголовками HTTP, а также играл с некоторыми настройками на моем сервере, но я не могу понять, что не так.
Я предполагаю, что метод Http.http.get() делает что-то фанк за кулисами, о которых я не знаю. Странно то, что моя вкладка dev-network моего браузера даже не показывает попытку достичь моего внешнего браузера.
Любая помощь в этом вопросе была бы очень признательна, я могу предоставить любую дополнительную информацию об отладке и действительно использовать точку в правильном направлении.
ng --version
angular-cli: 1.0.0-beta.24
node: 6.9.1
os: win32 x64
@angular/common: 2.4.3
@angular/compiler: 2.4.3
@angular/core: 2.4.3
@angular/forms: 2.4.3
@angular/http: 2.4.3
@angular/platform-browser: 2.4.3
@angular/platform-browser-dynamic: 2.4.3
@angular/router: 3.4.3
@angular/compiler-cli: 2.4.3
import { Injectable } from '@angular/core';
import { Headers, Http } from '@angular/http';
import 'rxjs/add/operator/toPromise';
...
constructor(private http: Http) { }
getObjects(): Promise<Object[]> {
function httpGet(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open("GET", theUrl, false); // false for synchronous request
xmlHttp.send(null);
return xmlHttp.responseText;
}
var x = httpGet(this.myUrl);
console.log(x); // This works perfectly and I see an entry on my server log
this.http.get(this.myUrl)
.subscribe(res => console.log(res));// This throws a 404 and I see no entry on my server logs nor in my browser network tab
var headers = new Headers({'content-type': 'application/json'});
this.http.get(this.myUrl, {headers: headers})
.subscribe(res => console.log(res));// This throws a 404 and I see no entry on my server logs nor in my browser network tab
return this.http.get(this.myUrl)
.toPromise()
.then(response => response.json().data as Object[])
.catch(this.handleError); //The original code that worked on an internal in-memory-api
}
Стоит отметить, что сообщение 404 распечатывает URL-адрес, к которому он не может получить доступ. Если я нажму на этот URL-адрес, он будет работать и, как показано в моем примере кода, XMLHttpRequest.open() использует одну и ту же переменную url; поэтому URL должен быть чистым. Я также могу установить соединение с использованием других библиотек, поэтому он не должен быть проблемой CORS или иметь какое-либо отношение к моему серверу API. Любые мысли? – SuperTetelman
Просто была та же проблема, спасибо – Dan