2017-01-29 14 views
16

के लिए नहीं मिला मैं जावा स्प्रिंग बूट बैकएंड के साथ कोणीय 2 अनुप्रयोग को एकीकृत करने की कोशिश कर रहा हूं। फिलहाल, मैं अपने कोणीय 2 फाइलों को src/main/resources/static के तहत रखता हूं (जिसका मतलब है कि कोणीय और स्प्रिंग ऐप्स दोनों एक ही पोर्ट पर एक ही ऐप को बुद्धिमान करते हैं)।कोणीय 2 HTTP प्राप्त करें 404 यूआरएल

मैं इस तरह HTTP GET करने के लिए कोशिश कर रहा हूँ:

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import { Language } from '../model/language'; 
import { Observable } from 'rxjs/Rx'; 
import 'rxjs/add/operator/catch'; 
import 'rxjs/add/operator/map'; 

@Injectable() 
export class LanguageService { 

    constructor(private http: Http) { } 

    private langUrl = 'api/languages'; 

    getLanguages() : Observable<Language[]> { 
     return this.http.get(this.langUrl) 
         .map((res:Response) => res.json()) 
    } 
} 

मैं जानबूझकर पाने से कोड से निपटने त्रुटि को हटा दिया है, क्योंकि यह त्रुटि को गुमराह करने के लिए ले जाता है। क्या मैं मिलता है:

Error: Uncaught (in promise): Error: Error in :0:0 caused by: Response with status: 404 Not Found for URL: api/languages 
Error: Error in :0:0 caused by: Response with status: 404 Not Found for URL: api/languages 
    at ViewWrappedError.BaseError [as constructor] (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:1179:31) [angular] 
    at ViewWrappedError.WrappedError [as constructor] (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:1232:20) [angular] 
    at new ViewWrappedError (http://localhost:8000/node_modules/@angular/core/bundles/core.umd.js:6552:20) [angular] 
//more output here - will provide full stack trace if needed 

यूआरएल http://localhost:8080/api/languages जावा स्प्रिंग नियंत्रक द्वारा नियंत्रित किया जाता है और यह काम करता है अगर मैं डाकिया या वेब ब्राउज़र के माध्यम से मिलता है।

  • मैं सर्वर लॉग
  • मैं परवाह किए बिना ही परिणाम मिल में किसी भी गतिविधि नहीं दिख रहा है, तो सर्वर साइड ऊपर या है:

    मेरे धारणा है कि 404 त्रुटि सर्वर से नहीं आया था, क्योंकि है नीचे।

मुझे लगता है कि मेरे कोणीय 2 कॉन्फ़िगरेशन में कुछ गड़बड़ है, लेकिन मुझे दस्तावेज़ में कोई सुझाव नहीं मिला है।

मैं अलग यूआरएल की कोशिश की, http://localhost:8080/api/languages, /api/languages, api/languages, another/working/server/endpoint की तरह - एक ही त्रुटि के लिए नेतृत्व।

मैंने JSONP का उपयोग करने के लिए भी here वर्णित करने का प्रयास किया है, लेकिन मुझे एक अलग मुद्दा मिला है कि जेएसओएनपी भाषा सेवा कन्स्ट्रक्टर को इंजेक्शन नहीं दिया गया था (यह मुद्दा एक अलग विषय है, मुझे लगता है)।

मुझे similar question मिला है, लेकिन अब तक इसका उत्तर कभी नहीं दिया गया था।

यदि आपके पास कोई समस्या है कि इस समस्या को कैसे ठीक किया जाए या इसी तरह की समस्या का सामना कैसे किया जाए - किसी भी मदद या टिप्पणी की अत्यधिक सराहना की जाएगी।

आप

उत्तर

38

इस त्रुटि के कारण यह है कि मैं मेरा के लिए एक आधार के रूप में इस्तेमाल किया Angular Tour of Heroes applcation था, और मैं app.module.ts पर निर्भरता को

"angular-in-memory-web-api": "~0.2.4", 

और InMemoryWebApiModule को नहीं निकाला। इस वजह से इन अनुरोधों को InMemoryWebApiModule द्वारा अवरुद्ध किया गया था (बावजूद मैंने इसे सीधे हीरोज ट्यूटोरियल के टूर में वर्णित नहीं किया था), यही कारण है कि मैंने ब्राउज़र डीबगर के 'नेटवर्क' टैब में कोई XMLHttpRequests नहीं देखा।

बाद मैं package.json और node_modules निर्देशिका पर निर्भरता को हटा दिया है, यह सामान्य रूप से काम शुरू कर दिया है, हालांकि, मैं Json पार्स करने के लिए सेवा कोड बदलना पड़ा सीधे टाइपप्रति इस तरह की वस्तुओं के लिए:

getLanguages(): Promise<Language[]> { 
    return this.http.get(this.langUrl) 
     .toPromise() 
     .then(response => response.json() as Language[]) 
     .catch(this.handleError); 
} 

यह एक है नौसिखिया गलती, लेकिन मुझे आशा है कि यह पोस्ट किसी के लिए कुछ घंटों के शोध को बचाएगा।

+6

बस यह जोड़ने के लिए कि आप उन यूआरएल से गुजरने के लिए मेमोरी वेब एपीआई में कॉन्फ़िगर कर सकते हैं जिन्हें आप संसाधित नहीं करना चाहते हैं, इसलिए इसे पूरी तरह से हटाने की आवश्यकता नहीं है - यह देखें [उत्तर] (http://stackoverflow.com/questions/41076251/कैसे-i-can-bypass-angular-in-memory-web-api-for-a-specific-url? Answertab = सक्रिय # टैब-टॉप) – djboardman

+0

@djboardman, मैं सहमत हूं, अच्छा बिंदु! विकास में उपयोगी हो सकता है जब सभी एपीआई तैयार नहीं होते हैं। –

+1

इसके लिए धन्यवाद! इस उम्र के लिए हम धन्यवाद! – cBlaine

0

धन्यवाद Chrome या Firefox में आप HTTP अनुरोध और प्रतिक्रियाओं आपके आवेदन निष्पादित करता देख (सिर्फ मारा F12 और नेटवर्क टैब का चयन करें) कर सकते हैं। चूंकि आप कह रहे हैं कि यह आपके ब्राउज़र या पोस्टमैन के साथ काम कर रहा है, आप दोनों अनुरोधों की तुलना कर सकते हैं और तुरंत अंतर ढूंढना चाहिए।

+0

आपके उत्तर के लिए धन्यवाद। मुझे 'नेटवर्क' टैब में कोई प्रासंगिक अनुरोध नहीं मिला क्योंकि कोई भी नहीं था। इसे 'InMemoryWebApiModule' द्वारा अवरुद्ध किया गया था, जैसा कि मैंने अपने उत्तर में वर्णित किया है। –

1

कुछ निराशाजनक शोधों के बाद मुझे एक समान समस्या थी, मैंने this पर 404 त्रुटि धन्यवाद हल किया। आयात के आदेश मायने रखता है।
उम्मीद है कि यह किसी की मदद करेगा।

संबंधित मुद्दे