美文网首页工作生活
nodejs做http请求转发,解决js跨域问题(二)

nodejs做http请求转发,解决js跨域问题(二)

作者: 嗷大喵 | 来源:发表于2019-07-01 18:16 被阅读0次

上篇讲了nodejs做http请求转发,解决js跨域问题(二)
现在遇到一个问题,公司的服务器防火墙针对User-Agent做了拦截。需要特定的User-Agent才能访问到API接口
如果用上篇的方法js的ajax请求目前在很多浏览器中是无法修改User-Agent,这样的话导致api请求可能无法成功。

我们可以在nodejs这一层加入请求修改User-Agent,不仅仅可以在nodejs这一层代理修改User-Agent,还可以修改request和response
例如
下面就修改了request的headers 添加了mytest=0000000000000和User-Agent= mytest
也修改了request里面的body给body添加了Type : 'jpg'以及修改了FileName : '2.jpg'
一定要注意如果修改了requestbody值一定要重新设置Content-Length

response原本是返回一个json{"ID":"1234567890","Name":"张三"},也把这个json改了,改成{"ID":"1234567890","Age":2}

var express = require('express');
var httpProxy = require('http-proxy-middleware');
var app = express();
var path = require('path');
var modifyResponse = require('node-http-proxy-json');
var bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));

function onProxyRes(proxyRes, req, res) {
    console.log("===============onProxyRes===============");
    //header添加一个addedX
    proxyRes.headers['x-addedX'] = 'xxxx';
    modifyResponse(res, proxyRes, function (body) {
        if (body) {
            body.Age = 2;
            delete body.Name;
        }
        return body; // return value can be a promise
    });
}

function onProxyReq(proxyReq, req, res) {
    // add custom header to request 
    console.log("===============onProxyReq===============");
    proxyReq.setHeader('mytest', '0000000000000');
    proxyReq.setHeader('User-Agent', 'mytest');
    // proxyReq.setHeader('Content-Type', 'application/json');
    if ( req.method == "POST" && req.body ) {
        var body =  req.body;
        var filename = req.body.FileName;
        filename = "2.jpg";
        body.FileName = filename;
        body.Type = "jpg";
        var bodyData = JSON.stringify(req.body);
        proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
        proxyReq.write(bodyData);
        proxyReq.end();

        // const contentType = proxyReq.getHeader('Content-Type');
        // const writeBody = (bodyData) => {
        //     proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));
        //     proxyReq.write(bodyData);
        // };

        // if (contentType === 'application/json') {
        //     writeBody(JSON.stringify(req.body));
        // }

        // if (contentType === 'application/x-www-form-urlencoded') {
        //     writeBody(querystring.stringify(req.body));
        // }
    }
}

var targetUrl = "http://127.0.0.1:5000/";
var options = {
    target: targetUrl, // target host 
    changeOrigin: true, 
    // preserveHeaderKeyCase:true,
    onProxyReq: onProxyReq,
    onProxyRes: onProxyRes
};

var proxy = httpProxy(options);
app.use('/Image/*', proxy);
app.use('/Account/*', proxy);

app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname, 'public/index.html'));
});

app.listen(3000);

相关文章

  • nodejs做http请求转发,解决js跨域问题(二)

    上篇讲了nodejs做http请求转发,解决js跨域问题(二)现在遇到一个问题,公司的服务器防火墙针对User-A...

  • nodejs做http请求转发,解决js跨域问题(一)

    解决js跨域,常见的方式有下几种 1.JSONP 2.CROS 3.通过中间server做转发 今天我们来讲一下用...

  • node跨域头

    Nodejs解决跨域请求 例

  • Koa代理Http请求

    Koa 代理http请求,解决跨域问题 1、为什么用Koa做跨域代理? "最初为了解决跨域问题,我把站点部署到了n...

  • pdf.js预览pdf文件

    一、下载pdf.js[http://mozilla.github.io/pdf.js/] 二、使用 跨域问题的解决...

  • 跨域

    ??JSONP只能解决GET请求跨域,不能解决POST请求跨域问题,XHR2可以解决GET,POST方式的请求跨域...

  • 新增-后端跨域

    前端程序 后端程序 现在请求无法,到达需要解决跨域问题 每个servlet单独做跨域设置 跨域过滤器

  • node.js进阶之【18】: 解决ajax跨越

    Nodejs作为后台解决跨域问题 一、安装 cors 模块 二、服务器配置

  • axios跨域和配置proxyTable

    使用vue-axios和vue-resource解决vue中调用网易云接口跨域的问题 vue.js学习之 跨域请求...

  • Js请求跨域问题

    一、请求跨域问题概述 跨域:指的是协议名、端口或者域名不一致的情况都是跨域。 二、跨域问题的解决方案 1、同域代理...

网友评论

    本文标题:nodejs做http请求转发,解决js跨域问题(二)

    本文链接:https://www.haomeiwen.com/subject/nnegcctx.html