'use strict' /** * proxy api http request to rongxin.gov.rgvn.api service */ const proxy = require('http-proxy-middleware') const config = require('config') const logFactory = require('../utils/logFactory') const logUtil = require('../utils/logUtil') const debug = logFactory(logUtil())('rongxin.gov.rgvn.dashboard.tiandeng:routes:apiProxy') class ApiProxy { constructor(policyRouter) { this._policyRouter = policyRouter } onProxyReq (proxyReq, req, res, options) { const method = 'proxyReq' debug(method, '[Proxy-Enter]', req.path) if (req.path.startsWith('/api')) { proxyReq.path = proxyReq.path.substring(4) debug(method, 'proxyReq.path: ', proxyReq.path, req.path) } } onProxyRes (proxyRes, req, res) { let method = "onProxyRes" debug('[Proxy-Exit]', req.path) debug('[onProxyRes] ', 'req.path = ', req.path, 'req.method = ', req.method) } onError (err, req, res) { let method = 'onError' debug.error(method, err) } init () { const self = this const govRgvnApiServiceUrl = `${config.get('rongxin_gov_rgvn_api_service').host}:${config.get('rongxin_gov_rgvn_api_service').port}`; const proxyInst = proxy({ target: govRgvnApiServiceUrl, router: { }, changeOrigin: true, logLevel: 'debug', logProvider: () => debug, onProxyRes: self.onProxyRes.bind(self), onProxyReq: self.onProxyReq.bind(self), onError: self.onError.bind(self) }) self._policyRouter.use('/api', proxyInst, { name: 'apiProxy.proxyInst' }); debug.info(`api proxy, api service uri: ${govRgvnApiServiceUrl}`) return self } } module.exports = ApiProxy