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日志并进行多维度分析。
相关文章
|
1月前
|
存储 运维 监控
API明细日志及运维统计日志全面提升API可运维性
在数字化转型的大潮中,数据已成为企业最宝贵的资产之一。而数据服务API可快速为数据应用提供数据接口。面对越来越多的API以及越来越多的应用调用,如何快速查看API的服务情况、异常情况及影响范围,以及查看API的调用详情,进行API的性能优化、错误排查变得越来越重要,本文将介绍如何配置和开通API运维统计及明细日志,以及如何查看日志进行介绍。
|
28天前
|
存储 缓存 JavaScript
如何优化Node.js应用的内存使用以提高性能?
通过以上多种方法的综合运用,可以有效地优化 Node.js 应用的内存使用,提高性能,提升用户体验。同时,不断关注内存管理的最新技术和最佳实践,持续改进应用的性能表现。
116 62
|
1月前
|
JavaScript 前端开发
如何使用时间切片来优化JavaScript动画的性能?
如何使用时间切片来优化JavaScript动画的性能?
|
24天前
|
存储 缓存 监控
如何使用内存监控工具来优化 Node.js 应用的性能
需要注意的是,不同的内存监控工具可能具有不同的功能和特点,在使用时需要根据具体工具的要求和操作指南进行正确使用和分析。
66 31
|
1月前
|
前端开发 JavaScript API
探究 React Hooks:如何利用全新 API 优化组件逻辑复用与状态管理
本文深入探讨React Hooks的使用方法,通过全新API优化组件逻辑复用和状态管理,提升开发效率和代码可维护性。
|
1月前
|
缓存 前端开发 JavaScript
JavaScript加载优化
JavaScript加载优化
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
优化CSS和JavaScript加载
|
1月前
|
缓存 JavaScript 前端开发
介绍一下 JavaScript 中数组方法的常见优化技巧
通过合理运用这些优化技巧,可以提高 JavaScript 中数组方法的执行效率,提升代码的整体性能。在实际开发中,需要根据具体的业务场景和数据特点选择合适的优化方法。
28 6
|
1月前
|
缓存 前端开发 JavaScript
优化CSS和JavaScript加载
Next.js和Nuxt.js在优化CSS和JavaScript加载方面提供了多种策略和工具。Next.js通过代码拆分、图片优化和特定的CSS/JavaScript优化措施提升性能;Nuxt.js则通过代码分割、懒加载、预渲染静态页面、Webpack配置和服务端缓存来实现优化。两者均能有效提高应用性能。
|
2月前
|
存储 JavaScript 前端开发
JavaScript垃圾回收机制与优化
【10月更文挑战第21】JavaScript垃圾回收机制与优化
38 5
下一篇
DataWorks