2016-10-18 4 views
4

Я пытаюсь опубликовать данные для поддержки файла Node js из Angular. После того, как форма представить ниже функции называется:Угловая Http Не работает

cmdSubmit() : void 
{ 
     console.log(this.cli); 
     this.Cliservice.postdata(this.cli) 
        .then(
         clidata => this.clidata.push(clidata), 
         error => this.errorMessage = <any>error); 

} 

PostData код функции:

postdata(obj:any): Promise<any> { 
    alert('hello'); 
    let body = JSON.stringify({ obj }); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.runUrl, body, options) 
        .map(this.extractData) 
        .catch(this.handleError); 

    /*return this.http.post(this.runUrl, body, options) 
        .map(this.extractData) 
        .catch(res => { 
      // do something 

      // To throw another error, use Observable.throw 
      return Observable.throw(res.json()); 
      });*/ 


    } 
    private extractData(res: Response) { 
    let body = res.json(); 
    return body.data || { }; 
} 

private handleError (error: any) { 
    // In a real world app, we might use a remote logging infrastructure 
    // We'd also dig deeper into the error to get a better message 
    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); 
    } 

} 

Но ничего не происходит. Я не получаю сообщение об ошибке. Можете ли вы предложить что-нибудь по этому поводу?

ответ

9

Каждый Http Функция, которая возвращает Observable, должна быть привязана к этому методу .subscribe(). Когда вы пропустите этот метод, запрос не будет выполнен. Поэтому приложите метод .subscribe() к каждой функции.

Как было сказано в комментариях, вы используете два подхода: Promise style и Observable style, поэтому я советую вам использовать один общий стиль.

this.http.post(this.runUrl, body, options) 
      .map(this.extractData).subscribe(/*here your parameters*/); 
+1

Он также смешивание up 'Observable' и' Promise', не переходя к 'Promise'. – rinukkusu

+1

@rinukkusu Да, ему нужно использовать общий стиль –

+0

Просто скажу вам, что вы можете немного улучшить свой ответ, чтобы решить все его ошибки :) – rinukkusu

3

То, что упомянуто @Suren, совершенно правильно. В качестве альтернативы, вы можете также использовать toPromise() метод на этом, а также напрямую преобразовать его в объект Promise:

return this.http.post(this.runUrl, body, options).toPromise(); 

Для этого, вам необходимо импортировать следующие

import 'rxjs/add/operator/toPromise' 
Смежные вопросы