如何构建 node.js 代理服务器?
在本文中,我们将创建一个 Node.js 代理,将请求转发到不同的服务器或端点。
代理服务器:代理服务器充当最终用户与他们希望访问的网站或 API 之间的中介。
为什么选择代理服务器?
在标准方法中,客户端直接向 API 端点发送请求以获取所需数据。在这种情况下,node.js 代理将充当用户和 API 之间的中介。因此,用户向代理发出请求,然后将请求转发到 API 端点。用户请求代理端点。
使用代理的好处是:
- 允许和限制 API 的某些资源。
- 提高网络性能。
- 负载均衡。
示例:让我们构建一个 node.js 代理服务器。
先决条件:确保您的设备上有以下应用程序。
- Node.js(安装)。
- Visual Studio 代码或任何其他代码编辑器。
- Postman 测试 API 请求。
方法:我们将构建一个 node.js 代理,用于向天气 API 发送请求——使用 http-proxy-middleware 框架打开天气地图。
第 1 步:初始化 npm
创建一个新的项目目录并前往终端。编写以下命令来初始化 npm。
npm init -y
第 2 步:安装所需的依赖项
我们需要在我们的项目中列出以下几个包:
- express:它是一个 node.js 框架。
- http-proxy-middleware:它是一个代理框架。
- dotenv:加载环境变量。
- morgan:记录请求。
通过运行以下命令安装上述软件包:
npm i express http-proxy-middleware dotenv morgan
第三步:创建代理服务器
创建一个 app.js 文件并编写代理服务器的代码。
首先,我们将安装的包导入我们的项目并创建一个快速服务器。
const express = require('express');
const morgan = require("morgan");
const { createProxyMiddleware } = require('http-proxy-middleware');
require('dotenv').config()
// Creating express server
const app = express();
要使用开放式天气图 API,您需要一个 API 密钥。转到 https://openweathermap.org/api 登录或创建一个新帐户。单击 API 密钥并复制密钥。
我们将创建一个.env 文件来存储此 API 密钥及其 URL。在 .env 文件中添加以下代码
API_BASE_URL = "https://api.openweathermap.org/data/2.5/weather"
API_KEY_VALUE = ""
然后,我们将提及我们的端口、主机和 API URL。
const PORT = 3000;
const HOST = "localhost";
const API_BASE_URL = process.env.API_BASE_URL;
const API_KEY_VALUE = process.env.API_KEY_VALUE;
const API_SERVICE_URL = `${API_BASE_URL}?q=London&appid=${API_KEY_VALUE}`;
代理逻辑:我们将创建一个代理中间件并指定 API 端点和用户将用来获取数据的新路径。默认情况下,我们将检索伦敦的天气。
app.use('/weather', createProxyMiddleware({
target: API_SERVICE_URL,
changeOrigin: true,
pathRewrite: {
[`^/weather`]: '',
},
}));
API_SERVICE_URL 将对用户隐藏,他们只能从 localhost:3000/weather 请求天气。在后台,路径将被重写为 localhost:3000/
配置服务器
// Start Proxy
app.listen(PORT, HOST, () => {
console.log(`Starting Proxy at ${HOST}:${PORT}`);
});
将以下代码添加到 app.js 文件中。
app.js
const express = require("express");
const morgan = require("morgan");
const { createProxyMiddleware } = require("http-proxy-middleware");
require("dotenv").config();
// Create Express Server
const app = express();
// Configuration
const PORT = 3000;
const HOST = "localhost";
const { API_BASE_URL } = process.env;
const { API_KEY_VALUE } = process.env;
const API_SERVICE_URL = `${API_BASE_URL}?q=London&appid=${API_KEY_VALUE}`;
// Logging the requests
app.use(morgan("dev"));
// Proxy Logic : Proxy endpoints
app.use(
"/weather",
createProxyMiddleware({
target: API_SERVICE_URL,
changeOrigin: true,
pathRewrite: {
"^/weather": "",
},
})
);
// Starting our Proxy server
app.listen(PORT, HOST, () => {
console.log(`Starting Proxy at ${HOST}:${PORT}`);
});
启动应用程序的步骤:使用以下命令运行应用程序:
node app.js
输出:
您现在可以使用代理服务器了。
第 4 步:去 Postman 发送请求。
我们将向 localhost:3000/weather 发送请求并获取伦敦的天气数据,如 URL 查询中指定的那样。用户甚至不知道确切的 API 端点。用户向代理服务器发送请求,代理服务器将请求转发到 API 端点。
输出: