如何构建一个node.js代理服务器
在本文中,我们将创建一个Node.js代理服务器,将请求转发到不同的服务器或端点。
代理服务器: 代理服务器充当用户和他们想要访问的网站或API之间的中介。
为什么使用代理服务器?
在标准的方法中,客户端直接发送请求到API端点来获取所需数据。在这种情况下,Node.js代理将充当用户和API之间的中介。因此,用户向代理发出请求,然后将其转发到API端点。用户请求代理端点。
使用代理的好处包括:
- 允许和限制API的某些资源。
- 提高网络性能。
- 负载均衡。
示例: 让我们构建一个Node.js代理服务器。
先决条件: 确保你的设备上安装了以下应用程序。
- Node.js(请安装)。
- Visual Studio Code或其他代码编辑器。
- Postman用于测试API请求。
步骤: 我们将使用http-proxy-middleware框架创建一个发送请求到天气API – Open Weather Map的Node.js代理。
步骤1:初始化npm
创建一个新的项目目录并进入终端。键入以下命令初始化npm。
npm init -y
步骤2:安装所需的依赖项
我们需要在我们的项目中安装一些列出的软件包,如下所示:
- express: 这是一个node.js框架。
- http-proxy-middleware: 这是一个代理框架。
- dotenv: 加载环境变量。
- morgan: 记录请求。
通过运行以下命令来安装上述软件包:
npm i express http-proxy-middleware dotenv morgan
步骤3:创建代理服务器
创建一个app.js文件,并编写代理服务器的代码。
首先,我们将导入安装的包到我们的项目中,并创建一个express服务器。
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 = "<Enter your API key>"
然后,我们将提及我们的端口、主机和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 端点。
输出: