Angular 应用程序中 proxy.conf.json 的 CORS 问题

问题描述 投票:0回答:4

我在 Stack Overflow 上看到过其他类似的问题,但到目前为止还没有对我有任何帮助。

我有一个 Angular 应用程序,服务于 http://localhost:4200。 我有一个后端 http://localhost:8080/myApp/

我正在尝试通过以下调用设置从前端到达后端:

public getPeople(): Observable<PeopleModel[]> {
    return this.http
        .post(API_URL + '/getPeopleDetails', {})
        .map(response => {
            const people = response.json();
            console.log(people);
            return partners.map((people) => new PeopleModel(people));
        })
        .catch(this.handleError);
}

API_URL 设置为 http://localhost:8080/myApp

我的代理配置如下所示:

{
    "/myApp/*": {
        "target": "http://localhost:8080/myApp",
        "secure": false,
        "changeOrigin": true,
        "logLevel": "debug",
        "pathRewrite" : {"^/myApp" : "http://localhost:8080/myApp"}
    }
}

我的package.json有以下内容:

"start": "ng serve --proxy-conf proxy.conf.json",

我在尝试运行应用程序时收到的错误是 CORS 错误和 403。

Failed to load http://localhost:8080/myApp/getPeopleDetails: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:4200' is therefore not allowed access. The response had HTTP status code 403.

我将不胜感激任何帮助。谢谢!

angular proxy
4个回答
3
投票

在与 package.json 文件平行的应用程序根目录中,创建一个新文件
proxy.config.json

{
"/api*": {
    "target":"http://localhost:8080",
    "secure":false,
    "logLevel":"debug"
    }
}  

现在在脚本:{} 中的 package.json 中,将以下文件名 proxy.config.json 添加到 start"

{
"name":"xyz",
"version":"1.0.0",
"license":"MIT",
"angular-cli": {},
"scripts": {
    "start":"ng serve --proxy-config proxy.config.json",
    "test":"ng test"
}

}

希望这对您有用。


0
投票

看起来问题是“start”中的选项应该是“--proxy-config”,而不是“--proxy-conf”:“ngserve --proxy-conf proxy.conf.json”


0
投票

您可能需要传递不带“api”的后端网址。遵循 proxy.conf.json 的另一个提示:

{
  "/api/*": {
    "target":"http://localhost:3000",
    "pathRewrite": {
      "^/api": "/myApp"
    },
    "secure":false
  }
}

https://angular.io/guide/build#proxying-to-a-backend-server


0
投票

我看到有人给你建议如何设置代理,实际上在你设置代理后的情况下,请将你的API_URL设置为http://localhost:4200/api,代理会将其变成http://localhost:8080/myApp,不是你,这就是为什么你再次遇到 CORS 问题,因为你已经设置了代理但实际上你没有使用它与错误的 API_URL,那就是 它。祝兄弟好运!

© www.soinside.com 2019 - 2024. All rights reserved.