webpack dev server CORS issue

后端 未结 5 775
情深已故
情深已故 2020-12-24 11:00

I am using webpack-dev-server v1.10.1 to boost up my Redux project and I have the options below:

contentBase: `http://${config.HOST}:${config.PO         


        
5条回答
  •  借酒劲吻你
    2020-12-24 11:28

    There are 2 solutions for this. first one is setting up proxy on the client side, second one is setting CORS on the server. CORS is server issue, server does not allow access from different source. Even using different ports is considered to be different source

    First Solution

    IN your backend code, you have to set this headers: this is example of in express node.js

    app.use((req, res, next) => {
      res.setHeader("Access-Control-Allow-Origin", "*");
      res.setHeader(
        "Access-Control-Allow-Methods",
        "OPTIONS, GET, POST, PUT, PATCH, DELETE"
      );
      res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");
      next();
    });
    

    Second Solution:

    in webpack config.js, if you want to pass any variable, we export

    module.exports=function(env){
    return {}} 
    

    instead of

    module.exports={}
    

    we inject this env through the script.

    "dev-server": "webpack-dev-server --env.api='https://jsonplaceholder.typicode.com/users'",
    

    now webpack has access to this env. in webpack.config.js

    module.exports = function ({
      api = "https://jsonplaceholder.typicode.com/users",
    }) {
      return {
        entry: { main: "./src/index.js" },
        output: {
          path: path.resolve(__dirname, "public"),
          filename: "[name]-bundle.js",
          publicPath: "/",
        },
        mode: "development",
        module: {
          rules: [
            {
              loader: "babel-loader",
              test: /\.js$/,
              exclude: [/node_modules/],
            },
            
            {
              // Load other files, images etc
              test: /\.(png|j?g|gif|ico)?$/,
              use: "url-loader",
            },
            {
              test: /\.s?css$/,
              use: ["style-loader", "css-loader", "sass-loader"],
            },
          ],
        },
        //Some JavaScript bundlers may wrap the application code with eval statements in development.
        //If you use Webpack, using the cheap-module-source-map setting in development to avoid this problem
        devtool: "cheap-module-eval-source-map",
        devServer: {
          contentBase: path.join(__dirname, "public"),
          historyApiFallback: true,
          proxy: {
            "/api": {
              changeOrigin: true,
              cookieDomainRewrite: "localhost",
              target: api,
              onProxyReq: (proxyReq) => {
                if (proxyReq.getHeader("origin")) {
                  proxyReq.setHeader("origin", api);
                }
              },
            },
          },
        },
        
      };
    };
    

提交回复
热议问题