2016-10-17 5 views
3

Мне очень сложно определить, что не так с моим кодом. Я пытаюсь создать класс обслуживания для подключения к моему отдельному приложению базы данных, которое предоставляет открытый (незащищенный) REST API.Angular2 Http - No Errors, No Connection

Если я подключаюсь к адресу в своем браузере, я могу правильно видеть результаты, и подключение регистрируется на моем сервере. Однако, когда я пытаюсь подключиться через мой сервисный класс 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 || { }; 
    } 
} 

В моей консоли я вижу результаты консоли (х) и консоль ('послал?), Так что я знаю, что код выполняется.

+0

Вы ввели «HttpModule» в файл app.module или main.module? – micronyks

+0

Вы можете использовать 'return x;' вместо 'return null;' и в компоненте вы можете подписаться на метод входа ... – micronyks

ответ

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)); 
+0

Ah awesome thanks! Примите, как только я позволю. – Steven

1

Вы забыли подписаться на призыв http.get.

Вам необходимо набрать:

http.get(...).subscribe(data => console.log(data)); 

сделать фактический вызов.

Наблюдения холодные, что означает без подписки ничего не происходит.

Смежные вопросы