使用 express 轻松实现反向代理服务器

遇到的问题

开发的时候遇到的一个问题,就是后台API和前端页面分开开发,但是开发的时候并不想在本地搭建后端环境,因为特别麻烦!特别麻烦!特别麻烦!比如说要配置运行环境、装数据库还有服务器。乱七八糟,有时候光是弄环境就要弄一天。可是如果不配置又没办法开发。最主要的是请求后端API的时候会遇到跨域问题。最简单的方法当然是后端帮忙配一个CORS。但是如果后端没办法配合的话,可能就比较麻烦了。这时候可以使用反向代理进行开发。

正向代理与反向代理

首先科普一下代理,代理分为正向代理和反向代理

  • 正向代理
正向代理,意思是一个位于客户端和原始服务器 (origin server) 之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标 (原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。
--摘自百度百科
  • 反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
--摘自百度百科

两者的主要区别在于代理的对象不一样: 正向代理代理的对象是客户端,反向代理代理的对象是服务端。
而我们遇到的问题就是需要使用反向代理解决。

开始撸代码

说到反向代理第一反应肯定是Nginx。确实Nginx做反代确实很好,但是说实话,没必要特意为了做个API的代理装个Nginx。而且还要去学习Nginx的配置。
另外,可能会想到webpack,当然如果你使用了webpack,直接就可以使用webpack-dev-server了。
但如果你手头上接手了一个老项目就比较尴尬了。下面进入正题使用express做开发代理服务器。

首先安装expresshttp-proxy-middlewareconnect-timeout(此模块用于处理超时):

npm install --save-dev express http-proxy-middleware connect-timeout
## 如有问题,则可以尝试使用下面的代码进行安装
npm install --save-dev express@4.16.2 http-proxy-middleware@0.17.4 connect-timeout@1.9.0
express是基于 Node.js 平台,快速、开放、极简的 web 开发框架。
http-proxy-middleware 是专门用于 http 代理的一个 node 中间件,适用于 connect, express, browser-sync 等等,由热门的 http-proxy 驱动。

之后新建一个proxy-server.js文件。

const express = require('express');
const timeout = require('connect-timeout');
const proxy = require('http-proxy-middleware');
const app = express();

// 这里从环境变量读取配置,方便命令行启动
// HOST 指目标地址
// PORT 服务端口
const { HOST = 'http://10.10.0.21:9080', PORT = '3300' } = process.env;

// 超时时间
const TIME_OUT = 30 * 1e3;

// 设置端口
app.set('port', PORT);

// 设置超时 返回超时响应
app.use(timeout(TIME_OUT));
app.use((req, res, next) => {
  if (!req.timedout) next();
});

// 静态页面
// 这里一般设置你的静态资源路径
app.use('/', express.static('static'));

// 反向代理(这里把需要进行反代的路径配置到这里即可)
// eg:将/api/test 代理到 ${HOST}/api/test
app.use(proxy('/api/test', { target: HOST }));

// 监听端口
app.listen(app.get('port'), () => {
  console.log(`server running @${app.get('port')}`);
});

启动

node proxy-server.js

然后再浏览器中打开http://localhost:3300即可

动态设置端口和反向代理地址

HOST=http://10.0.1.10:8081 PORT=3301 node proxy-server.js

此时则需要在http://localhost:3301进行访问。
至此,一个简单可用的开发环境就搞定了。

理论介绍参考:
反向代理为何叫反向代理?
正向代理与反向代理的浅解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现一个并发服务器,可以使用Express框架的`socket.io`模块来实现。以下是一个简单的并发服务器的示例代码: ```js const express = require('express'); const app = express(); const http = require('http').createServer(app); const io = require('socket.io')(http); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('客户端已连接'); // 监听客户端发送的消息 socket.on('message', (msg) => { console.log(`接收到客户端的消息:${msg}`); // 向客户端发送响应消息 socket.emit('response', '你好,客户端!'); }); // 监听客户端断开连接 socket.on('disconnect', () => { console.log('客户端已断开连接'); }); }); http.listen(8888, () => { console.log('服务器已启动,监听端口:8888'); }); ``` 在上面的代码,我们使用Express框架创建了一个HTTP服务器,并使用`socket.io`模块创建了一个WebSocket服务器。当客户端连接到服务器,`io.on('connection', callback)`函数会被调用,回调函数的`socket`参数是一个`socket.io`对象,它表示与客户端之间的连接。 我们可以监听`socket`对象的`message`事件来接收客户端发送过来的消息,然后使用`socket.emit()`方法向客户端发送响应消息。同,我们也需要监听`socket`对象的`disconnect`事件以处理客户端断开连接的情况。 在`app.get()`方法,我们设置了默认的路由并返回了一个HTML文件,以便在浏览器测试WebSocket连接。 最后,我们使用`http.listen()`方法启动服务器,并监听端口8888。 当然,上面的代码只是一个简单的示例,实际应用需要考虑更多的因素,如错误处理、并发连接数控制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值