2016-08-16 116 views
2

,我發現了以下錯誤:Uncaught TypeError: result.subscribe is not a function遺漏的類型錯誤:result.subscribe不是一個函數

這裏也是錯誤的截圖:

enter image description here

但我試圖抓住錯誤。在下面你可以看到我的代碼。

login.component.ts:

import { Component } from '@angular/core'; 
import { UserService } from '../../services/user.service'; 
import { User } from '../../models/user'; 
import {ToasterContainerComponent, ToasterService, ToasterConfig} from 'angular2-toaster/angular2-toaster'; 

@Component({ 
    moduleId: module.id, 
    selector: 'login', 
    directives: [ToasterContainerComponent], 
    templateUrl: 'login.component.html', 
    providers: [UserService, ToasterService] 
}) 

export class LoginComponent { 
    user: User = new User(); 
    loginRes: String; 
    private toasterService: ToasterService; 

    public toasterconfig: ToasterConfig = new ToasterConfig({ 
     showCloseButton: true, 
     tapToDismiss: false, 
     timeout: 0 
    }); 

    constructor(private _userService: UserService, toasterService: ToasterService) { 
     this.toasterService = toasterService; 
    } 

    data = {}; 
    onSubmit() { 
     this._userService.login(this.user) 
      .subscribe(
       res => { 
        console.log("res onSubmit"); 
        console.log(res); 
       }, 
       function(error) { console.log("Error happened" + error)} 
      ); 
    } 
} 

user.service.ts:

import { Injectable } from '@angular/core'; 
import { Headers, RequestOptions, Http, Response } from '@angular/http'; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 
import { User } from '../models/user'; 

@Injectable() 
export class UserService { 
    private loginUrl: string; 

    constructor(private _http: Http) { 

    } 

    login(user: User) { 
     this.loginUrl = "http://localhost:3000/api/auth/login"; 
     let data = { "username": user.username, "password": user.password }; 
     let body = JSON.stringify(data); 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let options = new RequestOptions({ headers: headers }); 

     return this._http.post(this.loginUrl, body, options) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

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

    private handleError(error: any) { 
     console.log('Yup an error occurred', error); 
     return error.message || error; 
    } 
} 

正如你可以看到我已經試圖抓住在login()方法的錯誤user.service.ts。任何人都知道我可以如何解決這個問題?

+0

你可以添加屏幕截圖嗎?直接回答你的問題,而不是外部鏈接。請在堆棧軌跡可見的地方添加一個(底部節點展開)。 –

+0

@GünterZöchbauer完成:) – superkytoz

+0

這絕對是更好的,但我不知道是什麼原因導致此錯誤: - / –

回答

8

handleError()功能需要。如果你看一下HTTP Client Angular 2 docs有一個例子返回一個Observable

,但對於您的具體情況

更換

private handleError(error: any) { 
    console.log('Yup an error occurred', error); 
    return error.message || error; 
} 

private handleError(error: any) { 
    console.log('Yup an error occurred', error); 
    return Observable.throw(error.message || error); 
} 
相關問題