找不到URL的Angular 2 HTTP GET 404

找不到URL的Angular 2 HTTP GET 404,angular,typescript,Angular,Typescript,我正在尝试将Angular2应用程序与JavaSpring引导后端集成。目前,我将Angular 2文件放在src/main/resources/static下(这意味着Angular和Spring应用程序在同一端口的同一应用程序中运行) 我正在尝试这样做: import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import { Language } from '../model/lan

我正在尝试将Angular2应用程序与JavaSpring引导后端集成。目前,我将Angular 2文件放在
src/main/resources/static
下(这意味着Angular和Spring应用程序在同一端口的同一应用程序中运行)

我正在尝试这样做:

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())
     }
}
getLanguages(): Promise<Language[]> {
    return this.http.get(this.langUrl)
        .toPromise()
        .then(response => response.json() as Language[])
        .catch(this.handleError);
}
URL
http://localhost:8080/api/languages
由JavaSpring控制器处理,如果我通过邮递员或Web浏览器获取,它就可以工作

我的印象是404错误不是来自服务器,因为:

  • 我在服务器日志中没有看到任何活动
  • 无论服务器端是向上还是向下,我都会得到相同的结果
我认为我的Angular 2配置有问题,但我在文档中找不到任何提示

我尝试了不同的URL,比如
http://localhost:8080/api/languages
/api/languages
api/languages
另一个/工作/服务器/端点
-所有这些都会导致相同的错误

我甚至尝试过如上所述使用JSONP,但我遇到了一个不同的问题,即JSONP没有被注入到语言服务构造函数中(我想这是一个不同的主题)

我找到了一个答案,但到目前为止还没有人回答

如果您对如何解决此问题有任何想法或遇到类似问题,我们将非常感谢您提供的任何帮助或意见


谢谢

在Chrome或Firefox中,您可以看到应用程序执行的HTTP请求和响应(只需点击F12并选择网络选项卡)。由于您说它与您的浏览器或邮递员一起工作,因此您可以比较两个请求,并很快找到差异。

此错误的原因是我使用application作为我的基础,并且我没有删除依赖项

 "angular-in-memory-web-api": "~0.2.4",
和app.module.ts中的memoryWebAPI模块中的
。正因为如此,所有请求都被InMemoryWebApiModule截获(尽管我没有像《英雄之旅》教程中所描述的那样直接调用它),这就是为什么我在浏览器调试器的“网络”选项卡中没有看到任何XMLHttpRequests

在我从
package.json
node\u modules
目录中删除依赖项后,它开始正常工作,但是,我不得不更改服务代码,将json直接解析为以下类型的脚本对象:

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())
     }
}
getLanguages(): Promise<Language[]> {
    return this.http.get(this.langUrl)
        .toPromise()
        .then(response => response.json() as Language[])
        .catch(this.handleError);
}
getLanguages():承诺{
返回this.http.get(this.langul)
.toPromise()
.then(response=>response.json()作为语言[])
.接住(这个.把手错误);
}

这是一个新手的错误,但我希望这篇文章能为其他人节省几个小时的研究时间。

我也遇到了类似的问题,在一些令人沮丧的研究之后,我解决了404错误,多亏了。进口顺序很重要。

希望它能帮助别人。

谢谢你的回复。我在“网络”选项卡中没有看到任何相关请求,因为没有人。正如我在回答中所描述的那样,它被
InMemoryWebAPI模块
截取。只需补充一点,您可以将内存中的web api配置为通过您不希望其处理的URL,因此无需将其完全删除-请参阅@djboardman,我同意,这一点很好!如果不是所有的API都准备好了,那么在开发中可能会很有用。谢谢!感谢我们生活在这个时代!非常感谢。几个小时以来,我一直在寻找答案,我真的很沮丧。我们的老师教我们如何创建假服务器,而不是如何从真实服务器获取数据。我认为我做错了什么。这里有一篇简单的文章来解决这个问题