web服务代理用它,还不够吗?

前言:现大部分项目都是前后端分离,与后端调试时需要使用其提供的服务接口,但是同时开发几个功能对应不同的接口人,这时候就需要频繁的切换接口IP,大部分项目切换IP时需要关闭项目重新启动,非常麻烦。使用node写一个代理就尤为重要,还能自定义返回内容以方便调试。

依赖安装

库介绍:

代理:http-proxy-middleware,使用比较广泛,配置也比较简单

请求拦截:express、body-parser

js 复制代码
npm install express@4.18.2 http-proxy-middleware@2.0.6 body-parser@1.20.1 --save -dev

主要代码

js 复制代码
    const { createProxyMiddleware, responseInterceptor } = require('http-proxy-middleware');
    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    // 处理application/json内容格式的请求体
    app.use(bodyParser.json());
    // 处理application/x-www-form-urlencoded内容格式的请求体
    app.use(bodyParser.urlencoded({ extended: true }));
    // 选项
    const options = {
        xfwd: false,
        selfHandleResponse: true, //是否修改响应内容
        target: serverInfo.ip, // 目标服务器:代理ip+端口
        changeOrigin: true, // 默认false,是否需要改变原始主机头为目标URL
        ws: true, //代理socket
        secure: false, //是否需要证书认证
        router: function(req) { //动态代理
            //如:http://localhost:3000?proxyIp=http://1.1.1.1将被代理到http://1.1.1.1
            if(req.headers.referer) {
				const hostUrl = new URL(req.headers.referer);
				const proxyIp = hostUrl.searchParams.get('proxyIp');
				if(proxyIp) return proxyIp;
			}
        },
        onProxyReqWs(proxyReq, req, socket) {
            //代理socket
            proxyReq.on('upgrade', function(proxyRes, proxySocket, proxyHead) {
                proxySocket.on('data', (data) => {
                    socket.write(data);
                });
            });
        },
        onError(err, req, res, target) {
            //错误监听
            res?.writeHead?.(500, {
                'Content-Type': 'text/plain',
            });
            res?.end(err.message);
        },
        onProxyReq: async (proxyReq, req, res) => {
           //监听、重写请求头
           proxyReq.write(Buffer.from(JSON.stringify(req.body)));
            proxyReq.end();
        },
        onProxyRes: (proxyRes, req, res) => {
            //监听、重写返回结果
             return responseInterceptor(async (buffer, proxyRes, req, res) => {
                //响应内容
                let responseTxt = buffer.toString('utf8');
                return buffer;
             })(proxyRes, req, res)
        },
    }
    // 创建反向代理服务
    const proxy = createProxyMiddleware(options);
    // 定义 context 函数
    const server = app.use(proxy);
    // 启动服务
    app.listen(8080, function () {
        console.log([
            '代理服务已启动',
            `设备地址${serverInfo.ip}`,
            `请将proxy、cgi等所有与设备相关的地址修改为:http://localhost:${PORT}`
        ].join(","));
    });

各位还有其他方法吗,评论区留言。

相关推荐
自信的未来14 分钟前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
全栈前端老曹27 分钟前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
zhangxingchao1 小时前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
zhangxingchao2 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端
gyx_这个杀手不太冷静2 小时前
Agent开发进阶指南(第 1 章):AI Agent 到底是什么?
前端·agent·ai编程
小小小小宇3 小时前
模型相关知识
前端
小小小小宇3 小时前
模型相关知识二
前端
IT_陈寒3 小时前
Python装饰器竟然偷偷改了函数名?这个坑我爬了三天
前端·人工智能·后端
Momo__4 小时前
Vite 8.1 打包开发模式——10000 组件冷启动 15 倍,"No Bundle Dev" 七年后被自己终结
前端·vue.js·vite
YHL4 小时前
🤖 Agent 智能体开发实战 · 第一课:Tool Use —— 让大模型自动干活
前端·javascript·人工智能