最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js添加API限流與日志優(yōu)化詳解

 更新時間:2024年11月11日 09:08:32   作者:前端青山  
這篇文章主要介紹了Node.js添加API限流與日志優(yōu)化的相關(guān)資料,以增強API的穩(wěn)定性和可維護性,API限流功能可以防止惡意請求和DDoS攻擊,優(yōu)化后的日志記錄系統(tǒng)則可以幫助我們更好地跟蹤和調(diào)試應用,快速定位問題,需要的朋友可以參考下

前言

在前幾篇文章中,我們已經(jīng)為 API 添加了身份驗證、CORS 配置、緩存機制和性能監(jiān)控。本文將繼續(xù)在這個基礎(chǔ)上,進一步增強 API 的穩(wěn)定性和可維護性。我們將添加 API 限流功能,并對日志進行優(yōu)化,以便更好地跟蹤和調(diào)試應用。

1. 添加 API 限流

為了防止 API 被惡意請求或濫用,我們可以添加 API 限流功能。這有助于保護服務器免受 DDoS 攻擊,并確保正常用戶的請求能夠得到及時響應。我們將使用 express-rate-limit 庫來實現(xiàn)這一功能。

1.1 安裝依賴

首先,我們需要安裝 express-rate-limit 庫。打開終端,導航到項目根目錄,然后運行以下命令:

npm install express-rate-limit

1.2 創(chuàng)建限流中間件

接下來,我們在 middlewares 目錄下創(chuàng)建一個名為 rateLimiter.js 的文件,用于定義限流中間件。

const rateLimit = require('express-rate-limit');

const apiLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 分鐘
  max: 100, // 每個 IP 允許的最大請求數(shù)
  message: 'Too many requests from this IP, please try again later.',
});

module.exports = apiLimiter;

在這個中間件中,我們設置了每個 IP 在 15 分鐘內(nèi)最多只能發(fā)送 100 個請求。如果超過這個限制,客戶端將收到一條提示消息,告知其請求過多,需要稍后再試。

1.3 應用限流中間件

最后,我們需要在 app.js 文件中應用這個限流中間件。打開 app.js 文件,添加以下代碼:

require('dotenv').config();
const express = require('express');
const helmet = require('helmet');
const compression = require('compression');
const cors = require('cors');
const swaggerUi = require('swagger-ui-express');
const swaggerJSDoc = require('swagger-jsdoc');
const itemsRouter = require('./routes/items');
const authRouter = require('./routes/auth');
const errorHandler = require('./middlewares/error-handler');
const connectDB = require('./config/db');
const logger = require('./middlewares/logger');
const statusMonitor = require('express-status-monitor');
const apiLimiter = require('./middlewares/rateLimiter');

const app = express();

// 配置 Helmet
app.use(helmet());

// 配置 CORS
app.use(cors());

// 日志中間件
app.use((req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
});

app.use(express.json()); // 解析 JSON 請求體

// 壓縮響應體
app.use(compression());

// 連接 MongoDB
connectDB();

// 性能監(jiān)控
app.use(statusMonitor());

// API 限流
app.use(apiLimiter);

// 路由
app.use('/items', itemsRouter);
app.use('/auth', authRouter);

// Swagger 配置
const options = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'My API',
      version: '1.0.0',
      description: 'This is a simple API for managing items.',
    },
    servers: [
      {
        url: `http://localhost:${process.env.PORT || 3000}`,
      },
    ],
  },
  apis: ['./routes/*.js'], // 指定包含 API 注解的文件
};

const specs = swaggerJSDoc(options);
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));

// 錯誤處理中間件
app.use(errorHandler);

module.exports = app;

2. 優(yōu)化日志記錄

為了更好地跟蹤和調(diào)試應用,我們需要優(yōu)化日志記錄。一個好的日志系統(tǒng)可以幫助我們快速定位問題,了解應用的運行狀態(tài)。我們將使用 winston 庫來實現(xiàn)更詳細和靈活的日志記錄。

2.1 安裝依賴

首先,我們需要安裝 winston 和 winston-daily-rotate-file 庫。打開終端,導航到項目根目錄,然后運行以下命令:

npm install winston winston-daily-rotate-file

2.2 創(chuàng)建日志配置

接下來,我們在 config 目錄下創(chuàng)建一個名為 logger.js 的文件,用于定義日志配置。

const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const transport = new DailyRotateFile({
  filename: 'application-%DATE%.log',
  datePattern: 'YYYY-MM-DD',
  zippedArchive: true,
  maxSize: '20m',
  maxFiles: '14d',
  dirname: 'logs',
});

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp(),
    winston.format.json()
  ),
  transports: [
    transport,
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      ),
    }),
  ],
});

module.exports = logger;

在這個配置中,我們設置了日志文件的命名規(guī)則、日期模式、歸檔方式、最大文件大小和保留天數(shù)。同時,我們還配置了控制臺輸出,以便在開發(fā)過程中能夠?qū)崟r查看日志信息。

2.3 更新日志中間件

最后,我們需要更新 middlewares/logger.js 文件,使用新的日志配置。

const logger = require('../config/logger');

const logRequest = (req, res, next) => {
  logger.info(`${req.method} ${req.url}`);
  next();
};

module.exports = logRequest;

3. 項目結(jié)構(gòu)

確保項目結(jié)構(gòu)如下:

my-app/
├── node_modules/
├── public/
│   └── index.html
├── routes/
│   ├── items.js
│   └── auth.js
├── models/
│   ├── item.js
│   └── user.js
├── middlewares/
│   ├── error-handler.js
│   ├── logger.js
│   ├── auth.js
│   ├── cache.js
│   └── rateLimiter.js
├── config/
│   ├── db.js
│   ├── redis.js
│   └── logger.js
├── .env
├── app.js
└── index.js

4. 運行項目

確保 MongoDB 和 Redis 服務已啟動。在項目根目錄下運行以下命令啟動應用:

npm install node index.js

訪問 http://localhost:3000/api-docs 查看 Swagger 文檔,訪問 http://localhost:3000/status 查看性能監(jiān)控頁面。

5. 測試與驗證

5.1 測試 API 限流

為了驗證 API 限流功能是否生效,我們可以使用 Postman 或其他 HTTP 客戶端工具發(fā)送多個請求。假設我們設置的限流規(guī)則是每個 IP 每 15 分鐘最多 100 個請求,我們可以嘗試發(fā)送超過 100 個請求,看看是否會被限流。

  • 打開 Postman,創(chuàng)建一個新的請求,設置請求方法為 GET,URL 為 http://localhost:3000/items。
  • 快速發(fā)送多個請求,直到達到 100 個請求。
  • 繼續(xù)發(fā)送請求,觀察響應是否返回 429 Too Many Requests 狀態(tài)碼,并且包含提示消息 Too many requests from this IP, please try again later.。

5.2 驗證日志記錄

為了驗證日志記錄是否正確,我們可以檢查日志文件和控制臺輸出。

  • 在項目根目錄下,找到 logs 目錄,查看是否有生成的日志文件。
  • 打開其中一個日志文件,檢查其中的內(nèi)容是否包含了請求的方法、URL 和時間戳。
  • 同時,檢查控制臺輸出,確保日志信息也顯示在控制臺上。

6. 總結(jié)與展望

通過本文,我們?yōu)?API 添加了限流功能,并優(yōu)化了日志記錄,進一步增強了 API 的穩(wěn)定性和可維護性。API 限流功能可以幫助我們防止惡意請求和 DDoS 攻擊,確保正常用戶的請求能夠得到及時響應。優(yōu)化后的日志記錄系統(tǒng)則可以幫助我們更好地跟蹤和調(diào)試應用,快速定位問題。

到此這篇關(guān)于Node.js添加API限流與日志優(yōu)化的文章就介紹到這了,更多相關(guān)Node.js API限流與日志優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一個簡單的node.js界面實現(xiàn)方法

    一個簡單的node.js界面實現(xiàn)方法

    今天小編就為大家分享一篇一個簡單的node.js界面實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • 如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼

    如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼

    我們在開發(fā)網(wǎng)站時,發(fā)送驗證碼的功能是必定會遇到的,下面這篇文章主要給大家介紹了關(guān)于如何利用node實現(xiàn)發(fā)送QQ郵箱驗證碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • koa+jwt實現(xiàn)token驗證與刷新功能

    koa+jwt實現(xiàn)token驗證與刷新功能

    這篇文章主要介紹了koa+jwt實現(xiàn)token驗證與刷新功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • 使用node搭建自動發(fā)圖文微博機器人的方法

    使用node搭建自動發(fā)圖文微博機器人的方法

    這篇文章主要介紹了使用node搭建自動發(fā)圖文微博機器人的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • nodejs對express中next函數(shù)的一些理解

    nodejs對express中next函數(shù)的一些理解

    這篇文章主要介紹了nodejs對express中next函數(shù)的一些理解,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Node.js的中間件及使用方法詳解

    Node.js的中間件及使用方法詳解

    在Node.js的生態(tài)中,中間件(Middleware)是一個不可或缺的概念,它為構(gòu)建靈活而高效的應用程序提供了強大的支持,下面給大家介紹Node.js的中間件及使用方法,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • NodeJS模塊Buffer原理及使用方法解析

    NodeJS模塊Buffer原理及使用方法解析

    這篇文章主要介紹了NodeJS模塊Buffer原理及使用方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 通過實例了解Nodejs模塊系統(tǒng)及require機制

    通過實例了解Nodejs模塊系統(tǒng)及require機制

    這篇文章主要介紹了通過實例了解Nodejs模塊系統(tǒng)及require機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • nodejs操作mongodb的填刪改查模塊的制作及引入實例

    nodejs操作mongodb的填刪改查模塊的制作及引入實例

    下面小編就為大家分享一篇nodejs操作mongodb的填刪改查模塊的制作及引入實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 詳解autojs的nodejs編寫UI技巧示例

    詳解autojs的nodejs編寫UI技巧示例

    這篇文章主要為大家介紹了autojs的nodejs編寫UI技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論

太谷县| 山阳县| 图木舒克市| 沙湾县| 陆良县| 合山市| 垣曲县| 疏勒县| 锡林浩特市| 平安县| 忻州市| 库尔勒市| 宁蒗| 文安县| 汾阳市| 天峻县| 开阳县| 花莲县| 临潭县| 会宁县| 甘孜县| 盐池县| 界首市| 阳泉市| 且末县| 太湖县| 南投县| 赤水市| 唐山市| 济阳县| 昌黎县| 恩施市| 灵寿县| 枞阳县| 常宁市| 永胜县| 万全县| 铜鼓县| 泸西县| 龙海市| 台湾省|