Vyhledávání na webu

http - Nepořádaná chyba TypeError: result.subscribe není funkcí


Dostávám následující chybu: Uncaught TypeError: result.subscribe není funkcí

Zde je také screenshot chyby:

Ale snažil jsem se chytit chybu. Níže můžete vidět můj kód.

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)}
            );
    }
}

uživatel.sluzba.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;
    }
}

Jak vidíte, pokusil jsem se zachytit chybu v metodě login() v souboru user.service.ts. Někdo náhodou ví, jak bych to mohl vyřešit?

Odpověď č. 1

Vaše funkce handleError() musí vracet Observable

Pokud se podíváte na dokumentaci HTTP klienta Angular 2, je tam příklad, ale pro váš konkrétní případ

Nahradit

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

s

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