#angular
#angular
Вопрос:
Мне очень сложно определить, что не так с моим кодом. Я пытаюсь создать класс обслуживания для подключения к моему отдельному приложению базы данных, которое предоставляет открытый (небезопасный) REST API.
Если я подключаюсь к адресу в своем браузере, я могу правильно видеть результаты, и на моем сервере регистрируется соединение. Однако, когда я пытаюсь подключиться через свой класс обслуживания Angular2, я не получаю никаких ошибок и попыток подключения на моем сервере.
Я снова и снова переписывал приведенное ниже, читал документы и не могу понять это! Я использую 2.0.1.
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
@Injectable()
export class AuthenticationService {
private loggedIn = false;
private loginUrl = 'http://localhost:3000/api/users';
constructor(private http: Http) { }
login(user:any): Observable<any[]> {
var x = this.http.get(this.loginUrl)
.map(this.extractData)
.catch(this.handleError);
console.log(x);
console.log("Sent?");
return null;
}
private handleError (error: any) {
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
private extractData(res: Response) {
let body = res.json();
return body.data || { };
}
}
В моей консоли я вижу результаты console (x) и console (‘отправлено?’), Поэтому я знаю, что код выполняется.
Комментарии:
1. Вы внедрили
HttpModule
файл app.module или main.module???2. Вы можете использовать
return x;
вместоreturn null;
и в компоненте вы можете подписаться на метод входа в систему…
Ответ №1:
Без subscribe()
или toPromise()
Observable
ничего не делает, потому что они ленивы
var x = this.http.get(this.loginUrl)
.map(this.extractData)
.catch(this.handleError);
Таким образом, он выполняет запрос
var x = this.http.get(this.loginUrl)
.subscribe(this.extractData, this.handleError);
Вы должны быть осторожны при использовании thin.
в extractData
и handleError
.
Обычно лучше всегда использовать функции со стрелками
var x = this.http.get(this.loginUrl)
.subscribe(data => this.extractData(data),
err => this.handleError(err));
Комментарии:
1. Ах, потрясающее спасибо! Примет, как только мне разрешат.
Ответ №2:
Вы забыли подписаться на вызов http.get.
Вам нужно ввести:
http.get(...).subscribe(data => console.log(data));
чтобы выполнить фактический вызов.
Наблюдаемые холодные, это означает, что без подписки ничего не происходит.