Angular 7 app getting CORS error from angular client

后端 未结 7 2119
逝去的感伤
逝去的感伤 2020-12-15 21:36

I have developed an angular 7 app with express backend. Express running on localhost:3000 and angular client is running on localhost:4200.

In the

相关标签:
7条回答
  • 2020-12-15 22:02

    I have been working with Angular cli and .net Framework in server side.

    To solve this problem, I just ennable CORS interaction in server side using the following steps:

    1. Install-Package Microsoft.AspNet.WebApi.Cors -Version 5.2.6

      And then, into WebApiConfig class:

    2. Add using System.Web.Http.Cors;

    3. Inside Register(HttpConfiguration config) method:

    var cors = new EnableCorsAttribute("http://localhost:4200", "*", "*");
    
    config.EnableCors(cors);
    

    or

    var cors = new EnableCorsAttribute("*", "*", "*"); //origin, headers, methods
    
    config.EnableCors(cors);
    
    0 讨论(0)
  • 2020-12-15 22:06

    Since, your angular app is running on 4200 port and backend running on 3000 port, the origin of both the application is different.

    To solve this problem, you can setup "nginx" in your machine.

    This will make all your requests from angular and backend, go via "nginx" server. Thus, solving the problem of CORS.

    0 讨论(0)
  • 2020-12-15 22:11

    If this is just for development I recommend using proxy that comes with angular-cli. Create a file called proxy.json

    and

    {
      "/api/oauth2/login": {
        "target": "http://localhost:3000/api/oauth2/login",
        "secure": false
      }
    }
    

    and the call ng serve --proxy-config proxy.json. If you expect this to be still a problem in production then we have to have a bigger conversation.

    Full documentation: https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

    Also what is CORS exacly: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

    0 讨论(0)
  • 2020-12-15 22:11

    To divert all calls for http://localhost:4200/api to a server running on http://localhost:3000/api, take the following steps.

    1. Create a file proxy.conf.json in the projects src/ folder, next to package.json.

    2. Add the following content to the new proxy file:

    {
        "/api": {
            "target": "`http://localhost:3000`",
            "secure": false
        }
    }
    
    1. In the CLI configuration file, angular.json, add the proxyConfig option to the serve target:
    ...
    "architect": {
        "serve": {
            "builder": "@angular-devkit/build-angular:dev-server",
            "options": {
                "browserTarget": "your-application-name:build",
                "proxyConfig": "src/proxy.conf.json"
            },
        ...
        }
    }
    ...
    
    1. To run the dev server with this proxy configuration, call ng serve.
    0 讨论(0)
  • 2020-12-15 22:19

    For Angular 7 you must do other implementation. From angular documentation you must create a proxy.js file:

    https://angular.io/guide/build#using-corporate-proxy

    Edit the path for your own backend server.

    proxy.js:

    var HttpsProxyAgent = require('https-proxy-agent');
    var proxyConfig = [{
      context: '/api',
      target: 'http://your-remote-server.com:3000',
      secure: false
    }];
    
    function setupForCorporateProxy(proxyConfig) {
      var proxyServer = process.env.http_proxy || process.env.HTTP_PROXY;
      if (proxyServer) {
        var agent = new HttpsProxyAgent(proxyServer);
        console.log('Using corporate proxy server: ' + proxyServer);
        proxyConfig.forEach(function(entry) {
          entry.agent = agent;
        });
      }
      return proxyConfig;
    }
    
    module.exports = setupForCorporateProxy(proxyConfig);
    

    Later add this to your package.json

    "start": "ng serve --proxy-config proxy.js"
    

    And call this with:

    npm start
    

    And in your app.js just simply add:

    const cors = require("cors");
    app.use(cors());
    

    I had same problem and that solved my issue. I hope it helps!

    0 讨论(0)
  • 2020-12-15 22:20

    I changed the callback mechanism to get past the CORS issue, I am utilizing a OAuth flow for the user to get authenticated from https://example.com which was redirecting to https://example.com/auth/callback, I was initiating the request from http://localhost:4200 and then sending the callback url to the server http://localhost:3000 and I was getting the CORS error.

    Now, I am redirecting it to the client http://localhost:4200 and got past the CORS problem. All other calls for GET, POST, DELETE, PATCH is from the http://localhost:3000 which is working fine.

    Thank you all for your inputs.

    0 讨论(0)
提交回复
热议问题