2016-02-24 12 views
6

मैं एक फ्रंट एंड विकसित कर रहा हूं जो सर्वर द्वारा प्रदान की गई JSON सेवाओं का उपभोग करता है।कोणीय 2 HTTP - यह समझने के लिए कि बैकएंड सर्वर

मैं खुशी से कोणीय 2 के HTTP का उपयोग करता हूं और मैं .catch() ऑपरेटर के माध्यम से त्रुटियों को पकड़ सकता हूं।

मैं एक विशिष्ट सेवा से संबंधित एक समस्या मिल जाए (जैसे सेवा सर्वर से परिभाषित नहीं है) catch() ऑपरेटर स्थिति 404 के साथ एक Response प्राप्त करता है और मैं आसानी से स्थिति का प्रबंधन कर सकते हैं।

दूसरी ओर, अगर यह सर्वर है कि पूरी तरह से नीचे, catch() ऑपरेटर स्थिति कोड 200 और कोई विशेष संकेत या पाठ समस्या (जो कि पूरे सर्वर है के कारण से संबंधित के साथ एक प्रतिक्रिया प्राप्त करता है नीचे)। कंसोल पर मुझे लगता है कि कोणीय (http.dev.js) एक संदेश net::ERR_CONNECTION_REFUSED लिखता है लेकिन मुझे नहीं पता कि मेरे कोड के भीतर से कुछ ऐसा कैसे करना है (यानी समझ रहा है कि क्या हो रहा है और उचित प्रतिक्रिया दें)।

किसी भी मदद की सराहना की जाएगी।

+0

आप इस के लिए एक समाधान मिला? यहां मेरा जवाब भी देखें .... –

+0

यदि मुझे किसी HTTP ऑपरेशन में त्रुटि मिलती है (जैसे POST, GET) और त्रुटि स्थिति 200 है तो मुझे लगता है कि पूरा सर्वर डाउन है, कुछ 'निजी हैंडलर त्रुटि (त्रुटि: प्रतिक्रिया) { लेयर त्रुटि; अगर (error.status == 200) { errorText = 'पूरा सर्वर नीचे है। कनेक्शन अस्वीकार कर दिया गया है। '; } वापसी Observable.throw (errorText || 'सर्वर त्रुटि'); } '; यह सुनिश्चित करने से बहुत दूर है कि यह विधि वास्तव में ठीक है, लेकिन मुझे लगता है कि – Picci

+0

का सामना करने वाले मामलों में काम करना अच्छा लगता है। लेकिन आपको यह महसूस करना चाहिए कि यदि वे इस समस्या को हल करते हैं और आप अपग्रेड करते हैं तो आपका कोड टूट जाएगा। इसलिए, जब भी आप इस वर्कअराउंड का उपयोग करते हैं तो 'TODO' रखना एक अच्छा विचार हो सकता है –

उत्तर

1

मैं angular2.0.0-beta.15

का उपयोग करते समय ऐसा लगता है कि यह एक बग है एक ही समस्या है। आप http स्थिति 200 हो और यह सही नहीं है:

https://github.com/angular/http/issues/54

+1

बीटीडब्लू लिंक आज के रूप में टूटा हुआ है – superjos

4

आप अपने आवेदन में विश्व स्तर पर इस घटना को संभालने के लिए मैं थोड़ा संशोधित निकोलस Henneaux के जवाब https://stackoverflow.com/a/37028266/1549135

मूल रूप से आप कर सकते हैं का उपयोग कर की अनुशंसा करते हैं error.status === 0 के लिए जांचें जो तब होता है जब net::ERR_CONNECTION_REFUSED त्रुटि होती है।

पूरा मॉड्यूल फ़ाइल:

import { Request, XHRBackend, BrowserXhr, ResponseOptions, XSRFStrategy, Response } from '@angular/http'; 
import { Observable } from 'rxjs/Observable'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/observable/throw'; 

export class AuthenticationConnectionBackend extends XHRBackend { 

    constructor(_browserXhr: BrowserXhr, _baseResponseOptions: ResponseOptions, _xsrfStrategy: XSRFStrategy) { 
    super(_browserXhr, _baseResponseOptions, _xsrfStrategy); 
    } 

    createConnection(request: Request) { 
    let xhrConnection = super.createConnection(request); 
    xhrConnection.response = xhrConnection.response.catch((error: Response) => { 
     if (error.status === 0){ 
     console.log("Server is down...") 
     } 
     ... 
     return Observable.throw(error); 
    }); 
    return xhrConnection; 
    } 

} 

मॉड्यूल फ़ाइल:

import { BrowserModule } from '@angular/platform-browser'; 
import { NgModule } from '@angular/core'; 
import { CommonModule } from '@angular/common'; 
import { HttpModule, XHRBackend } from '@angular/http'; 
import { AppComponent } from './app.component'; 
import { AuthenticationConnectionBackend } from './authenticated-connection.backend'; 

@NgModule({ 
    bootstrap: [AppComponent], 
    declarations: [ 
     AppComponent, 
    ], 
    entryComponents: [AppComponent], 
    imports: [ 
     BrowserModule, 
     CommonModule, 
     HttpModule, 
    ], 
    providers: [ 
     { provide: XHRBackend, useClass: AuthenticationConnectionBackend }, 
    ], 
}) 
export class AppModule { 
} 
संबंधित मुद्दे