2017-03-24 7 views
5

편집 : 질문 끝 부분을 읽으십시오!TypeError : error.json이 함수가 아닙니다.

내가이 오류 : enter image description hereenter image description here

내 서비스 코드 :

import { Http, Response, Headers } from "@angular/http"; 
import { Injectable } from "@angular/core"; 
import 'rxjs/add/operator/map'; 
import 'rxjs/add/operator/catch'; 
import { Observable } from "rxjs"; 

import { Client } from "./client.model"; 

@Injectable() 
export class ClientService { 
    private clients: Client[] = []; 

    constructor(private http: Http){} 

    addClient(client: Client) { 
     this.clients.push(client); 
     const body = JSON.stringify(client); 
     const headers = new Headers({'Content-Type': 'application/json'}); 
     return this.http.post('http://localhost:3000/client', body, {headers: headers}) 
      .map((response: Response) => response.json()) 
      .catch((error: Response) => Observable.throw(error.json())); 
    } 

    getClients() { 
     return this.clients; 
    } 

    deleteClient(client: Client) { 

    } 
} 

그리고 내 구성 요소에 내가 가진

이 제출 기능 :

onSubmit(form: NgForm) { 
    let email = form.value.email; 
    let password = form.value.password; 
    let firstName = form.value.firstName; 
    let lastName = form.value.lastName; 

    const client = new Client(email, password, firstName, lastName); 
    this.clientService.addClient(client) 
     .subscribe(
      data => console.log(data), 
      error => console.error(error) 
     ); 
    form.resetForm(); 
} 

유사한 오류가 herehere. 그 대답은 항상 rxjs 함수를 포함하는 것이지만, 나는 그렇게합니다. 그래서 나는 확실히 확신 할 수 없습니다. 왜이 에러가 나옵니까.

편집 :

그래서 실제 문제는이 기능이 아니었지만, 누락 "/"주 app.js 파일에 내 경로 전에. 이를 해결 한 후에 문제는 사라졌습니다.

+0

가능한 중복 : http://stackoverflow.com/questions/39162056/angular2-res-json-is-not- ([Angular2는 res.json는 함수가 아닙니다] a-function) – Igor

+0

@Igor 당신은 내 구멍 질문을 읽었습니까, 그렇죠? 나는 비슷한 문제가 있다는 것을 지적했다. 그것은 나를 위해 일하지 않는 것 같다 .. – Zoker

+0

나는 당신의 전체적인 질문을 읽었다. 그 이유는 복제물에 json을 포함하지 않기 때문입니다. 같은 범인을 가진 다른 유사한 질문이 있습니다. 브라우저에서 디버그하고 오류의 응답 상태를 확인하면 실제로 json을 사용할 수 없다는 것을 알게 될 것입니다. 또한 브라우저 디버거의 네트워크 IO 탭에서 결과를 확인하여이 작업을 수행 할 수 있습니다. – Igor

답변

3

잡아 내지 말고 다시 올리지 마십시오. 서비스를 사용할 때 예외를 처리하십시오.

.map(response => response.json()); 

또는 당신은 당신의 서비스에 예외를 처리하고, 당신이 Observable.throw의 documentation 볼 수 있으며 사용 방법에

.map(response => response.json()) 
      .catch(error => Observable.throw("Error in x service")); 

을 다음 당신이 할 수있는 오류를 반환하려는 경우 .

오류 개체의 형식이 잘못되었습니다. 일부 콘솔 로그를 추가하여 돌아 오는 것을 확인할 수 있습니다. 하지만 문제를 일으키고 있습니다.

+0

불행히도 여전히 같은 오류가 발생합니다 .... – Zoker

+0

이제 얻을 수 있습니다 : http://fs5.directupload.net/images/170324/9oxnhpki.png – Zoker

+0

@Zoker 방금 추가 한 솔루션을 사용해보십시오. –

4

글쎄, 그것은 상태. 관찰 가능에서 반환 된 오류에 json 메서드가 없습니다. 즉, 형식이 Response이 아니지만 오류 만 포함되어 있음을 의미합니다. 당신은 당신의 콘솔에서 객체를 인쇄하여 거기에 뭐가 있는지보고 시도해야합니다 :

.catch((error: any) => console.log(error)) 

당신은 아마이 유형 응답의 응답에 단지 xmlhttpresponse 객체

+3

http://fs5.directupload.net/images/ 170324/5pt2upu4.png – Zoker

2

망가 호출 JSON()입니다 찾을 수 있습니다. 예를 들어 데이터를 돌려받을 것으로 예상되는 경우. 클라이언트가 방금 수행 덧붙였다의

.map((data: any) => { 
    return data._embedded.client as Client; 
}); 
관련 문제