📜  如何构建 node.js 代理服务器?

📅  最后修改于: 2022-05-13 01:56:17.711000             🧑  作者: Mango

如何构建 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

初始化 npm

第 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 密钥并复制密钥。

在 Open Weather Map 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 端点。

输出:

发送请求以获取天气数据