express服务器代理解决跨域

https://blog.csdn.net/nep_chan/article/details/116146799open in new window

搭建express全局安装open in new window

npm install -g express-generator@4

express命令创建应用架构

express katsuki
cd katsuki

安装express-http-proxy

https://www.npmjs.com/package/express-http-proxyopen in new window

npm i express-http-proxy --save

app.js中添加

var proxy = require("express-http-proxy");
const proxyConfig = {
  URL: "10.10.10.10",
  PORT: "2333",
};
// 访问 http://localhost:3000/katsuki/api
// 转换 http://10.10.10.10:2333/api
app.use(
  "/katsuki",
  proxy("http://" + proxyConfig.URL + ":" + proxyConfig.PORT)
);

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();



app.all("*", function (req, res, next) {
  // 设置允许跨域的域名,*代表允许任意域名跨域
  res.header('Access-Control-Allow-Origin', '*');
  // 允许的header类型
  res.header('Access-Control-Allow-Headers', '*');
  // 跨域允许的请求方式
  res.header('Access-Control-Allow-Methods', 'DELETE,PUT,POST,GET,OPTIONS');
  if (req.method.toLowerCase() == 'options') {
    res.send(200); // 让options 尝试请求快速结束
  }
  else {
    next();
  }

})


let proxy = require("express-http-proxy");

// const userResDecorator = function (rsp, data, req, res, callback) {
//   data = JSON.parse(data.toString('utf8'));
//   console.log('请求url:', req.url)
//   console.log('请求数据', data);
//   res.status(200);
//   return data
// }

const proxyReqPathResolver = function (req, res) {
  console.log(require('url').parse(req.url).path)
  return require('url').parse(req.url).path;
}

// 前缀
app.use(
  "/api",
  proxy(() => 'http://owms-hms-dev.com:80', {
    proxyReqPathResolver: (req) => {
      const url = '/api' + req.url;
      console.log(url)
      return url;
    }
  })
);

// app.use(
//   "/owms/api/v2",
//   proxy("http://owms-hms-dev.com/api/", { intercept, forwardPath })
// );
app.use(
  "/workorder",
  proxy(() => 'http://test1-owms-uswe.eminxing.com', {
    proxyReqPathResolver: (req) => {
      const url = '/workorder' + req.url;
      console.log(url)
      return url;
    }
  })
);

app.use(
  "/aftermarket",
  proxy(() => 'http://test1-owms-uswe.eminxing.com', {
    proxyReqPathResolver: (req) => {
      const url = '/owms/api/v1/aftermarket' + req.url;
      console.log(url)
      return url;
    }
  })
);

app.use(
  "/moment_storage",
  proxy(() => 'http://test1-owms-uswe.eminxing.com', {
    proxyReqPathResolver: (req) => {
      const url = '/moment_storage' + req.url;
      console.log(url)
      return url;
    }
  })
);

// app.use(
//   "/aftermarket",
//   proxy("http://test1-owms-uswe.eminxing.com/owms/api/v1/aftermarket/", { intercept, forwardPath })
// );


module.exports = app;

Last Updated:
Contributors: 刘荣杰