node作为中间层 —> 跨域请求java后台接口(使用http-proxy-middleware中间件)
2024-10-19 02:23:29
情景:利用node的express 作为中间层,跨域调取java后台接口,由于java接口对session有判断,因此每次请求都必须在req的headers中需要带上cookie,否则接口报500错误,通过多次尝试,终于成功调取到接口,代码如下:
const express = require('express');
const path = require('path');
const proxyMiddleware = require('http-proxy-middleware'); // default port where dev server listens for incoming traffic
const port = 3335; const app = express(); //设置cookie
let cookie;
function relayRequestHeaders(proxyReq, req) {
if (cookie) {
proxyReq.setHeader('cookie', cookie);
}
}; function relayResponseHeaders(proxyRes, req, res) {
let proxyCookie = proxyRes.headers["set-cookie"];
if (proxyCookie) {
cookie = proxyCookie;
}
}; let options = {
target: 'http://192.168.1.2:8081', // target host
changeOrigin: true, // needed for virtual hosted sites
pathRewrite: {
'^/': '/Edit-WS/', // rewrite path
},
onProxyReq: relayRequestHeaders,
onProxyRes: relayResponseHeaders,
}; // 静态资源 处理
app.use(express.static(path.join(__dirname + '/WebRoot'))); // 访问登录页(/)
app.get('/', function(req, res, next) {
console.log('test=============');
let options = {
root: __dirname + '/WebRoot/',
dotfiles: 'deny',
headers: {
'x-timestamp': Date.now(),
'x-sent': true
}
}; let fileName = 'index_2x.html';
res.sendFile(fileName, options, function(err) {
if (err) {
console.log(err);
res.status(err.status).end();
} else {
console.log('Sent:', fileName);
}
});
}); // 匹配的路由(正则)
app.use('/**/*.do', proxyMiddleware(options)); const server = app.listen(port);
最新文章
- Integer与int的区别(包装类和基本数据类型的区别)
- 实现在Android 下log的使用总结
- Bash基本语法
- Jython概要
- uart串口的调试学习
- JavaScript基础---语言基础(2)
- Java架构师之路:JAVA程序员必看的15本书
- JS调用iframe方式实现Web区域打印页面内容
- Android去除系统自带动画的两种方法
- MIP 移动网页加速器视频教程全新发布
- JavaScript一看就懂(3)数组
- Spring Kafka整合Spring Boot创建生产者客户端案例
- Laravel 怎么在 blade 视图中将带 HTML 字符原样输出
- confluence
- Must be between v0 and v15, inclusive解决办法
- Android图片加载框架最全解析(七),实现带进度的Glide图片加载功能
- c的链接详解
- C# WebBrowser的8个方法、13个属性和事件
- Python 实现图片对比检测
- ES6——Class 的基本使用