前端本地使用node作为中间层解决跨域

发布时间 2023-10-17 12:09:08作者: mason张
const express = require('express');
const timeout = require('connect-timeout');
const { createProxyMiddleware } = require('http-proxy-middleware');
const app = express();

// HOST 指目标地址 代理指向地址 代理到oa.lininn.cn也可后面加端口
let PROXY_HOST = 'http://10.0.7.230:18080'
//本地启动端口
let Local_PORT = 9000;
// 超时时间
const TIME_OUT = 30 * 1e3;

// 设置端口
app.set('port', Local_PORT);

// 设置超时 返回超时响应
app.use(timeout(TIME_OUT));
app.use((req, res, next) => {
if (!req.timedout) next();
});


// 静态页面
// 这里一般设置你的静态资源路径
app.use('/', express.static('./aa'));

/*
反向代理配置
简单赘述:就是本地访问 /workflow 这个接口,把所有请求反向代理到服务器,但由于本地html未登陆,所以代理处加了个登陆的cookie,很简单
*/
let options = {
target: PROXY_HOST,
changeOrigin: true, // needed for virtual hosted sites
// ws: true,
onProxyReq(proxyReq, req, res) {
console.log(proxyReq)
//本地由于没有cookie,所以这里设置了cookie,发送给后台,这里可以设置发送给后台的headers,自己研究,更多设置请查询https://www.npmjs.com/package/http-proxy-middleware
proxyReq.setHeader('Cookie', '123');
proxyReq.setHeader('a111', '123');
}
}
app.post('/test', function (req, res) {

let dataList = [
{ "name": "Tom", "age": 20 },
{ "name": "Jerry", "age": 18 },
{ "name": "Lucy", "age": 19 }
]
res.json(dataList) // 返回json字符串
})
app.use('/api', createProxyMiddleware(options))



// 监听端口
app.listen(Local_PORT, () => {
console.log(`server running @${Local_PORT}`);
});