/* * @Author: code4eat awesomedema@gmail.com * @Date: 2024-04-09 18:07:34 * @LastEditors: code4eat awesomedema@gmail.com * @LastEditTime: 2026-04-17 15:39:05 * @FilePath: /KC-MiddlePlatform/config/proxy.ts * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ const proxy: { [key: string]: any } = { dev: { // WebSocket 专用代理,避免被 /gateway 先匹配成 HTTP '/gateway/centerSys/websocket': { // 本地开发按实际网关地址转发 target: 'ws://dev.kcim.cn', changeOrigin: true, ws: true, // 后端实际路径不带 /gateway 前缀 // pathRewrite: { '^/gateway': '' }, // 将 query 中的 token 写入 Header,后端只认 Header onProxyReq(proxyReq: any, req: any) { proxyReq.on('error', (err: any) => { console.error('WS proxyReq error:', err?.message || err); }); try { const url = new URL(req.url, 'http://placeholder'); const token = url.searchParams.get('token'); if (token) { proxyReq.setHeader('token', token); } } catch (e) { // ignore } }, onProxyReqWs(proxyReq: any, req: any) { proxyReq.on('error', (err: any) => { console.error('WS proxyReqWs error:', err?.message || err); }); try { const url = new URL(req.url, 'http://placeholder'); const token = url.searchParams.get('token'); if (token) { proxyReq.setHeader('token', token); } } catch (e) { // ignore } }, onError(err: any, req: any, res: any) { console.error('WS proxy error:', err?.message || err); try { res.writeHead(502); res.end('WS proxy error'); } catch (_) { } }, }, '/gateway': { //target: 'http://47.96.149.190', target: 'http://120.27.235.181', //target: 'http://platform.pre.bs.qjczt.com:5000', changeOrigin: true, timeout: 30000, proxyTimeout: 30000, onProxyReq(proxyReq: any) { proxyReq.on('error', (err: any) => { console.error('Gateway proxyReq error:', err?.message || err); }); }, onError(err: any, req: any, res: any) { console.error('Gateway proxy error:', err?.message || err); try { res.writeHead(502); res.end('Gateway proxy error'); } catch (_) { } }, // pathRewrite: { '^/master': '' }, }, '/api': { target: 'http://120.27.235.181:8088', changeOrigin: true, timeout: 30000, proxyTimeout: 30000, onProxyReq(proxyReq: any) { proxyReq.on('error', (err: any) => { console.error('API proxyReq error:', err?.message || err); }); }, onError(err: any, req: any, res: any) { console.error('API proxy error:', err?.message || err); try { res.writeHead(502); res.end('API proxy error'); } catch (_) { } }, // 本地开发:对 /api/se 开头的请求不走代理,交由 umi mock 处理 bypass: function (req: any) { if (req && req.url && req.url.startsWith('/api/se')) { return req.url; } return undefined; }, }, '/ai': { target: 'http://192.168.0.120:5003', //target: 'http://116.62.47.88:5003', changeOrigin: true, pathRewrite: { '^/ai': '' }, selfHandleResponse: true, onProxyRes: function onProxyRes(proxyRes: any, req: any, res: any) { proxyRes.on('data', function (data: any) { res.write(data); }); proxyRes.on('end', function () { res.end(); }); proxyRes.on('error', function (err: any) { console.error('AI ProxyRes error:', err); res.end(); }); res.on('error', function (err: any) { console.error('AI Res error:', err); }); }, onError(err: any, req: any, res: any) { console.error('AI proxy error:', err?.message || err); try { res.writeHead(502); res.end('AI proxy error'); } catch (_) { } }, }, }, mock: { '/master/': { target: 'http://localhost:8000', changeOrigin: true, pathRewrite: { '^': '' }, }, }, }; export default proxy;