• 003/node.js--代理服务(解决跨域问题)


    业务描述:

    1。web前端发送http请求

    2。web后端为https协议

    如何保证web前端发送http请求到web后端(跨域问题:域名不一致即跨域),

    因此用node.js写了个代理服务,转发前端http请求到后端,再获取后端数据返回给前端。

    代码如下所示:

      1 'use strict';
      2 
      3 const express = require('express');
      4 const fs = require('fs');
      5 const path = require('path');
      6 const https = require('https');
      7 const http=require('http');  
      8 const cookieParser = require('cookie-parser');
      9 const bodyParser = require('body-parser');
     10 const app = express();
     11 const url = require("url");
     12 app.use(cookieParser());
     13 app.use(bodyParser.urlencoded({
     14   extended: true
     15 }));
     16 app.use(bodyParser.json());
     17 
     18 //设置跨域访问
     19 app.all('*', function(req, res, next) {
     20   res.header("Access-Control-Allow-Origin", "http://localhost:8080");
     21   res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
     22   res.header('Access-Control-Allow-Credentials', true);
     23   res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
     24   res.header("X-Powered-By", ' 3.2.1');
     25   res.header("Content-Type", "application/json;charset=utf-8");
     26   if (req.method == "OPTIONS") res.send(200);
     27   else next();
     28 });
     29 // Https代理请求
     30 app.post('/rancher', function(req1, res1) {
     31   let urlbody=url.parse(req1.body.url)
     32   console.log("urlbody=========");
     33   console.log(urlbody);
     34   let postData =req1.body.postData||'';
     35   var opts = {
     36       method:req1.body.type,
     37       host:urlbody.host,
     38       port:urlbody.port||'',
     39     //   path:urlbody.path+(urlbody.search||''),
     40       path:urlbody.path,
     41       headers:{
     42           'Content-Type':'application/json',
     43           'Content-Length':postData.length,
     44           'Authorization':'Basic xx',
     45           'Cookie':'',
     46           'Cluster-id':req1.body.cid||''
     47       },
     48       rejectUnauthorized:false
     49   }
     50   console.log("opts=========");
     51   console.log(opts);
     52   var req = https.request(opts,function(res){
     53       var datas = [];
     54       var size = 0;
     55       res.on('data',function(data){
     56           datas.push(data);
     57           size += data.length;
     58       })
     59       res.on('end', function(){
     60           var buff = Buffer.concat(datas, size);
     61           console.log('success'+datas);
     62           res1.send(buff);
     63       })
     64   })
     65   req.on('error',function(err){
     66       console.log('异常,异常原因'+err);
     67   })
     68   if (req1.body.type!="get") {
     69     req.write(postData);
     70   }
     71   req.end();
     72 
     73 });
     74 
     75 // Http代理请求
     76 app.post('/http/rancher', function(req, res1) {
     77   let urlbody=url.parse(req.body.url)
     78   console.log("urlbody=========");
     79   console.log(urlbody);
     80   let postData =req.body.postData||'';
     81   //发送 http Post 请求
     82   var opts = {
     83     method:req.body.type,
     84     host:urlbody.hostname,
     85     port:urlbody.port&&urlbody.port||'',
     86     path:urlbody.path,
     87     headers:{
     88         'Content-Type':'application/json',
     89         'Content-Length':postData.length,
     90         'Authorization':'Basic xx',
     91         'Cookie': 'xx',
     92     },
     93   }
     94   var req=http.request(opts, function(res) {
     95       console.log('Opts:',opts);
     96       console.log('Status:',res.statusCode);
     97       console.log('headers:',JSON.stringify(res.headers));
     98       res.setEncoding('utf-8');
     99       res.on('data',function(chun){
    100           console.log('body分隔线---------------------------------
    ');
    101           console.info(chun);
    102           res1.send(chun);
    103       });
    104       res.on('end',function(){
    105           console.log('No more data in response.********');
    106       });
    107   });
    108   req.on('error',function(err){
    109       console.error(err);
    110   });
    111   req.write(postData);
    112   req.end();
    113 });
    114 
    115 let server = app.listen(8089, function() {
    116   let host = server.address().address;
    117   let port = server.address().port;
    118 
    119   console.log('Example app listening at http://%s:%s', host, port);
    120 });
    View Code
  • 相关阅读:
    SGU 176.Flow construction (有上下界的最大流)
    POJ 2391.Ombrophobic Bovines (最大流)
    poj 1087.A Plug for UNIX (最大流)
    poj 1273.PIG (最大流)
    POJ 2112.Optimal Milking (最大流)
    SGU 196.Matrix Multiplication
    SGU 195. New Year Bonus Grant
    关于multicycle path
    ppt做gif动图
    codeforces 598A Tricky Sum
  • 原文地址:https://www.cnblogs.com/kaixinyufeng/p/9300573.html
Copyright © 2020-2023  润新知