假设我们有两个服务如下
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上利用代理即可。鉴权利用同源政策就好。和乾坤等框架相比 简洁太多了。