巧妙利用 http-proxy 搭建前端微服务

157 阅读1分钟

假设我们有两个服务如下

let projectPortMap = {
    '/a': {
        url: 'http://192.168.8.132:8080/'
    },
    '/b': {
        url: 'http://192.168.8.132:8081/'
    }
}

利用 http + http-proxy 搭建服务代理

var http = require('http'),
    httpProxy = require('http-proxy'),
    proxy = httpProxy.createProxyServer();
let serveUrl = '';
var listen = 80; // 端口可任意指定
var server = http.createServer(function (req, res) {
    try {
        let pathname = req.url
        let hasProxy = projectPortMap[pathname] // 是否命中服务
        if (hasProxy) {
            serveUrl = hasProxy.url
        }
        if (serveUrl) {
            // 如果命中服务 则 将服务上的请求均代理至服务
            let opt = {target: serveUrl}
            proxy.web(req, res, opt);
        } else {
            // 容错处理
            res.end('end')
        }
    } catch (e) {
        console.error(e)
    }
});

// 捕获异常
proxy.on('error', function (err, req, res) {
  res.writeHead(500, {
    'Content-Type': 'text/plain'
  });
  res.end('网络错误.');
});

// 监听 端口 请求
server.listen(listen); 

可使用 opn 自动打开浏览器

const opn = require('opn');
opn(`http://localhost:${listen}/a`)
总结: 如此 服务分发拆解的工作就完成了,从此告别项目过大编译贼慢的痛苦。 切记服务小 run 起来贼快,但是也不能拆分的过于小,会导致后期项目贼多不易维护。还是依照项目业务 拆分为几个大项为好。部署的话在Ng上利用代理即可。鉴权利用同源政策就好。和乾坤等框架相比 简洁太多了。