2017-03-24 17 views
5

संपादित करें: प्रश्न के अंत में भाग पढ़ें!टाइप एरर: 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(); 
} 

वहाँ समान त्रुटियाँ हैं here और here। जवाब हमेशा आरएक्सजे कार्यों को शामिल करना है, लेकिन मैं ऐसा करता हूं, इसलिए मुझे पूरा यकीन नहीं है, मुझे यह त्रुटि क्यों मिलती है।

संपादित करें:

तो वास्तविक समस्या नहीं इस समारोह था, लेकिन एक लापता "/" मुख्य app.js फ़ाइल में मेरे मार्ग से पहले। इसे हल करने के बाद, मुद्दा चला गया था।

+0

की संभावित डुप्लिकेट [Angular2: res.json नहीं एक समारोह है] (http://stackoverflow.com/questions/39162056/angular2-res-json-is-not- ए-फ़ंक्शन) – Igor

+0

@ इगोर आप मेरा छेद प्रश्न पढ़ते हैं, है ना? मैंने बताया, कि एक ही मुद्दा है, जो मेरे लिए काम नहीं कर रहा है .. – Zoker

+0

मैंने आपका पूरा प्रश्न पढ़ा। इसका कारण यह है कि इसमें डुप्लिकेट की तरह जेसन शामिल नहीं है। एक ही अपराधी के साथ अन्य समान प्रश्न हैं। अपने ब्राउज़र में डीबग करें और त्रुटि में प्रतिक्रिया की स्थिति देखें, आपको शायद पता चलेगा कि वास्तव में कोई जेसन उपलब्ध नहीं है। आप अपने ब्राउज़र डीबगर के नेटवर्क आईओ टैब में परिणाम देखकर भी ऐसा कर सकते हैं। – Igor

उत्तर

3

पकड़ो और पीछे हटें मत। जब आप सेवा का उपभोग करते हैं तो बस अपवाद को संभालें।

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

या फिर आप अपने सेवा में अपवाद को संभालने के लिए, और सिर्फ निम्नलिखित

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

आप Observable.throw की documentation देख सकते हैं और यह कैसे किया जाता है एक त्रुटि आप कर सकते हैं वापसी चाहते हैं ।

आपके द्वारा प्राप्त की जा रही त्रुटि वस्तु विकृत है। आप कुछ कंसोल लॉग जोड़ सकते हैं यह देखने के लिए कि आप क्या प्राप्त कर रहे हैं। लेकिन यह मुद्दों का कारण बन रहा है।

+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/ 170,324/5pt2upu4.png – Zoker

2

न कॉल json() प्रकार प्रतिक्रिया की प्रतिक्रिया पर है मिल जाएगा। यदि आप डेटा की अपेक्षा करते हैं, उदाहरण के लिए। ग्राहक ही में जोड़े गए बस करो:

.map((data: any) => { 
    return data._embedded.client as Client; 
}); 
संबंधित मुद्दे