如何用nodejs搭建代理服务器

 更新时间:2022年08月03日 16:42:58   作者:Anita-Sun  
这篇文章主要介绍了如何用nodejs搭建代理服务器,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

代理服务器的原理

案例

安装 express、http-proxy-middleware

app.js 文件 node app.js

var express = require('express');
var app = express();
app.use(express.static('./public'));
app.listen(3000);

在 public 文件夹下建立 a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="Click()">点击发送请求</button>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        function Click() {
             axios('http://localhost:5000/b')
                 .then(function(res) {
                     console.log(res);
                 });
        }
    </script>
</body>
</html>
</body>
</html>

搭建接口服务器,接口服务器端口号 5000

node interface.js

var express = require('express');
var app = express();

app.get("/", (req, res) => {
    res.send("123");
});

app.get("/api/a", (req, res) => {
    res.send("a");
});

app.get("/b", (req, res) => {
    console.log(req.headers);
    res.send("b");
});

app.listen(5000);

访问http://localhost:3000/a.html

搭建代理服务器解决跨域问题

更改 app.js

var express = require('express');
var proxy = require('http-proxy-middleware');
var app = express();
app.use(express.static('./public'));

app.use('/api', proxy.createProxyMiddleware({
    target: 'http://localhost:5000',
    changeOrigin: false,
    pathRewrite: {
        "^/api": ""
    }
}));
app.listen(3000);

更改 a.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button onclick="Click()">点击发送请求</button>
    <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
    <script>
        function Click() {
            // axios('http://localhost:5000/b')
            //     .then(function(res) {
            //         console.log(res);
            //     });

            axios('/api/b')
                .then(function(res) {
                    console.log(res);
                });
        }
    </script>
</body>
</html>
</body>
</html>

访问 http://localhost:3000/a.html

原理解释

将 a.html 请求地址改为 /api/b,那么发送请求的时候会自动补上主机和端口号http://localhost:3000

所以请求发送到了3000端口

参数含义

  • target: 转发到的目标地址
  • changeOrigin: 是否更改host。默认为false,不重写

true

false

  • pathRewrite:路径重写(在这里是去掉’api’)

最终请求被转发到了 http://localhost:5000/b

app.get("/b", (req, res) => {
    console.log(req.headers);
    res.send("b");
});

整个过程就像这样

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Node.js 制作实时多人游戏框架

    Node.js 制作实时多人游戏框架

    这篇文章主要介绍了Node.js 制作实时多人游戏框架,需要的朋友可以参考下
    2015-01-01
  • Node.js 异步异常的处理与domain模块解析

    Node.js 异步异常的处理与domain模块解析

    本篇文章主要介绍了Node.js 异步异常的处理与domain模块解析,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Mac下通过brew安装指定版本的nodejs教程

    Mac下通过brew安装指定版本的nodejs教程

    今天小编就为大家分享一篇Mac下通过brew安装指定版本的nodejs教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • 利用node.js开发cli的完整步骤

    利用node.js开发cli的完整步骤

    这篇文章主要给大家介绍了关于如何利用node.js开发cli的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • node.js实现BigPipe详解

    node.js实现BigPipe详解

    这篇文章主要介绍了node.js实现BigPipe详解,BigPipe是 Facebook 开发的优化网页加载速度的技术,BigPipe 的核心概念就是只用一个 HTTP 请求,只是页面元素不按顺序发送而已,需要的朋友可以参考下
    2014-12-12
  • Nodejs基于LRU算法实现的缓存处理操作示例

    Nodejs基于LRU算法实现的缓存处理操作示例

    这篇文章主要介绍了Nodejs基于LRU算法实现的缓存处理操作,结合具体实例形式分析了LRU算法的原理、功能以及nodejs使用LRU算法实现缓存处理操作的相关实现技巧,需要的朋友可以参考下
    2017-03-03
  • Nodejs Playwright 2Captcha 验证码识别实现自动登陆功能

    Nodejs Playwright 2Captcha 验证码识别实现自动登陆功能

    日常工作当中,为了提高工作效率,我们可能会写脚本来自动执行任务,有些网站因为需要用户登陆,所以脚本的自动登陆功能必不可少,这篇文章主要介绍了Nodejs Playwright 2Captcha 验证码识别实现自动登陆功能,需要的朋友可以参考下
    2024-05-05
  • express的中间件cookieParser详解

    express的中间件cookieParser详解

    这篇文章主要介绍了node.js中express的中间件cookieParser的使用方法,需要的朋友可以参考下
    2014-12-12
  • 详解Windows下安装Nodejs步骤

    详解Windows下安装Nodejs步骤

    本篇文章主要介绍了详解Windows下安装Nodejs步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • NodeJS中配置请求代理服务器方式

    NodeJS中配置请求代理服务器方式

    这篇文章主要介绍了NodeJS中配置请求代理服务器方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10

最新评论