mp_*_*oki 21 typescript angular
我正在尝试将Angular 2应用程序与Java Spring Boot后端集成.目前,我将Angular 2文件置于其下src/main/resources/static(意味着Angular和Spring应用程序在同一端口上运行相同的应用程序).
我试图像这样做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())
}
}
Run Code Online (Sandbox Code Playgroud)
我故意从get中删除了错误处理代码,因为它会导致误导性错误.我得到的是:
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
Run Code Online (Sandbox Code Playgroud)
URL http://localhost:8080/api/languages由Java Spring控制器处理,如果我通过Postman或Web Browser进行GET操作,它就可以工作.
我的印象是404错误不是来自服务器,因为:
我认为我的Angular 2配置有问题,但我没有在文档中找到任何提示.
我尝试了不同的网址,比如http://localhost:8080/api/languages,/api/languages,api/languages,another/working/server/endpoint-都导致了同样的错误.
我甚至尝试使用这里描述的JSONP ,但是我遇到了一个不同的问题,即JSONP没有注入语言服务构造函数(我猜这个问题是另一个主题).
我发现了一个类似的问题,但到目前为止从未得到过回答.
如果您有任何想法如何解决此问题或遇到类似问题 - 任何帮助或评论将受到高度赞赏.
谢谢
mp_*_*oki 46
这个错误的原因是我使用Angular Tour of Heroes applcation作为我的基础,我没有删除依赖
"angular-in-memory-web-api": "~0.2.4",
Run Code Online (Sandbox Code Playgroud)
并InMemoryWebApiModule从app.module.ts.因此,所有请求都被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);
}
Run Code Online (Sandbox Code Playgroud)
这是一个新手的错误,但我希望这篇文章可以节省几个小时的研究.
| 归档时间: |
|
| 查看次数: |
26912 次 |
| 最近记录: |