node作为中间层 —> 跨域请求java后台接口(使用http-proxy-middleware中间件)

情景:利用node的express 作为中间层,跨域调取java后台接口,由于java接口对session有判断,因此每次请求都必须在req的headers中需要带上cookie,否则接口报500错误,通过多次尝试,终于成功调取到接口,代码如下:

 1 const express = require('express');
 2 const path = require('path');
 3 const proxyMiddleware = require('http-proxy-middleware');
 4 
 5 
 6 // default port where dev server listens for incoming traffic
 7 const port = 3335;
 8 
 9 const app = express();
10 
11 //设置cookie
12 let cookie;
13 function relayRequestHeaders(proxyReq, req) {
14   if (cookie) {
15     proxyReq.setHeader('cookie', cookie);
16   }
17 };
18 
19 function relayResponseHeaders(proxyRes, req, res) {
20   let proxyCookie = proxyRes.headers["set-cookie"];
21   if (proxyCookie) {
22     cookie = proxyCookie;
23   }
24 };
25 
26 
27 let options = {
28     target: 'http://192.168.1.2:8081', // target host
29     changeOrigin: true, // needed for virtual hosted sites
30     pathRewrite: {
31         '^/': '/Edit-WS/', // rewrite path
32     },
33     onProxyReq: relayRequestHeaders,
34     onProxyRes: relayResponseHeaders,
35 };
36 
37 // 静态资源 处理
38 app.use(express.static(path.join(__dirname + '/WebRoot')));
39 
40 // 访问登录页(/)
41 app.get('/', function(req, res, next) {
42     console.log('test=============');
43     let options = {
44         root: __dirname + '/WebRoot/',
45         dotfiles: 'deny',
46         headers: {
47             'x-timestamp': Date.now(),
48             'x-sent': true
49         }
50     };
51 
52     let fileName = 'index_2x.html';
53     res.sendFile(fileName, options, function(err) {
54         if (err) {
55             console.log(err);
56             res.status(err.status).end();
57         } else {
58             console.log('Sent:', fileName);
59         }
60     });
61 });
62 
63 // 匹配的路由(正则)
64 app.use('/**/*.do', proxyMiddleware(options));
65 
66 const server = app.listen(port);

 

转载于:https://www.cnblogs.com/geqin/p/8617825.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值