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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM