eggjs像nginx一样进行请求转发
发布于 4 年前 作者 wushanchao 9780 次浏览 来自 问答

eggjs每次接收到浏览器的请求,又要通过内置的HttpClient进行接口转发到实际的java后端,请问如何设置成像nginx一样方便

7 回复

支持 use(path, middleware)的router + koa2-connect + http-proxy-middleware

@magicdawn 大佬,能否详细说说

在eggjs里面写原生node也行。原生node转发端口的话,可以参考这个 http://blog.star7th.com/2019/06/2356.html

@wushanchao

koa 的, egg.js 里能拿到 app 的话也是一样

const connect = require('koa2-connect')
const proxy = require('http-proxy-middleware')
const mount = require('koa-mount')

// location /some/path {
//   proxy_pass http://localhost:1337;
// }
app.use(mount('/some/path', connect(proxy({target: 'http://localhost:1337/some/path'}))))


// location /some/path {
//   proxy_pass http://localhost:1337/api;
// }
app.use(mount('/some/path', connect(proxy({target: 'http://localhost:1337/api'}))))

最后使用了插件egg-proxy实现批量转发。 参考配置如下:

exports.proxy = [{
  host: 'http://xxx.xxx.xxx.xxx', 
  match: /xxx\/upload/, 
  map(path) {
    const finalPath = path.replace('/xxx/','/v1/api/')
    return finalPath;
  }
}];

http-proxy-middleware

可以看下 egg-http-proxy-middleware

  • middleware 而非 plugin,保障 middleware 的执行顺序
  • 内部处理了 bodyParser 问题
  • 100% typescript
  • 配置式,配置同 webpack-dev-server
回到顶部