Node.js-API 限流与日志优化

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Node.js-API 限流与日志优化
  1. 添加 API 限流
    为了防止 API 被恶意请求或滥用,我们可以添加 API 限流功能。这有助于保护服务器免受 DDoS 攻击,并确保正常用户的请求能够得到及时响应。我们将使用 express-rate-limit 库来实现这一功能。

1.1 安装依赖
首先,我们需要安装 express-rate-limit 库。打开终端,导航到项目根目录,然后运行以下命令:

npm install express-rate-limit
1.2 创建限流中间件
接下来,我们在 middlewares 目录下创建一个名为 rateLimiter.js 的文件,用于定义限流中间件。

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

const apiLimiter = rateLimit({
windowMs: 15 60 1000, // 15 分钟
max: 100, // 每个 IP 允许的最大请求数
message: 'Too many requests from this IP, please try again later.',
});

module.exports = apiLimiter;
在这个中间件中,我们设置了每个 IP 在 15 分钟内最多只能发送 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();

// 性能监控
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;

  1. 优化日志记录
    为了更好地跟踪和调试应用,我们需要优化日志记录。一个好的日志系统可以帮助我们快速定位问题,了解应用的运行状态。我们将使用 winston 库来实现更详细和灵活的日志记录。

2.1 安装依赖
首先,我们需要安装 winston 和 winston-daily-rotate-file 库。打开终端,导航到项目根目录,然后运行以下命令:

npm install winston winston-daily-rotate-file

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
15天前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
|
11天前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
13天前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
17天前
|
缓存 JavaScript 前端开发
介绍一下 JavaScript 中数组方法的常见优化技巧
通过合理运用这些优化技巧,可以提高 JavaScript 中数组方法的执行效率,提升代码的整体性能。在实际开发中,需要根据具体的业务场景和数据特点选择合适的优化方法。
24 6
|
15天前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
2月前
|
存储 JavaScript 前端开发
JavaScript垃圾回收机制与优化
【10月更文挑战第21】JavaScript垃圾回收机制与优化
31 5
|
2月前
|
安全 测试技术 API
优化 API 生命周期的 5 个关键领域
您是否曾遇到过令人沮丧的 API 文档?或为版本控制问题而苦恼?或为集成难题而苦恼?这些只是困扰 API 开发领域的一些常见挑战。
|
3月前
|
缓存 JavaScript 中间件
优化Express.js应用程序性能:缓存策略、请求压缩和路由匹配
在开发Express.js应用时,采用合理的缓存策略、请求压缩及优化路由匹配可大幅提升性能。本文介绍如何利用`express.static`实现缓存、`compression`中间件压缩响应数据,并通过精确匹配、模块化路由及参数化路由提高路由处理效率,从而打造高效应用。
170 10
|
3月前
|
存储 缓存 JavaScript
JavaScript 中数组方法的常见优化技巧
JavaScript 中数组方法的常见优化技巧
|
4月前
|
C# 开发者 测试技术
震惊!Xamarin 竟能如此构建跨平台应用程序,代码共享、界面设计与性能优化全攻略大揭秘!
【8月更文挑战第31天】在移动应用开发领域,跨平台工具日益受到青睐。Xamarin 是一款强大的工具,支持使用 C# 开发适用于 iOS、Android 和 Windows 的应用。通过安装 Visual Studio 或 Visual Studio for Mac,并创建 Xamarin 项目,开发者可以利用丰富的功能和工具进行开发。Xamarin 的主要优势在于代码共享,能够显著提高开发效率。
80 0