# 常用插件清单

URL: https://caijiao.org/fastify/appendix/plugins
Source: docs/fastify/appendix/plugins.md
Description: 本节列出了一些常用的 Fastify 插件，帮助开发者更好地扩展和定制 Fastify 应用。

[Fastify](/fastify/) 提供了强大的插件机制，开发者可以通过插件来扩展框架的功能。以下是一些常用的 Fastify 插件，可以帮助你快速提升应用的功能和性能。

## 1. `fastify-cors`

**功能**: 处理跨域请求。

**描述**: `fastify-cors` 插件用于启用跨域资源共享（CORS）。它允许你在 Fastify 应用中处理来自不同域的请求。

**安装**:

```bash
npm install fastify-cors
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-cors'), { 
  origin: "*"
});
```

## 2. `fastify-jwt`

**功能**: 提供 JSON Web Token（JWT）认证。

**描述**: `fastify-jwt` 插件让你可以在 Fastify 应用中轻松实现 JWT 认证和授权。

**安装**:

```bash
npm install fastify-jwt
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-jwt'), {
  secret: 'supersecret'
});

fastify.post('/login', async (request, reply) => {
  const token = fastify.jwt.sign({ user: 'example' });
  return { token };
});
```

## 3. `fastify-swagger`

**功能**: 自动生成 API 文档。

**描述**: `fastify-swagger` 插件可以根据 Fastify 路由的定义自动生成 OpenAPI（Swagger）文档，帮助开发者轻松管理和展示 API 文档。

**安装**:

```bash
npm install fastify-swagger
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-swagger'), {
  routePrefix: '/documentation',
  swagger: {
    info: {
      title: 'Test Swagger',
      description: 'Test Swagger API documentation',
      version: '1.0.0'
    }
  }
});

fastify.get('/example', async (request, reply) => {
  return { hello: 'world' };
});

fastify.get('/docs', async (request, reply) => {
  reply.redirect('/documentation');
});
```

## 4. `fastify-helmet`

**功能**: 提供安全相关的 HTTP 头部。

**描述**: `fastify-helmet` 插件用于添加一组安全相关的 HTTP 头部（如 Content Security Policy、X-Content-Type-Options 等），提高应用的安全性。

**安装**:

```bash
npm install fastify-helmet
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-helmet'));
```

## 5. `fastify-redis`

**功能**: 连接和操作 Redis 数据库。

**描述**: `fastify-redis` 插件用于连接 Redis 数据库，方便缓存、会话管理和其他操作。

**安装**:

```bash
npm install fastify-redis
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-redis'), {
  host: '127.0.0.1'
});

fastify.get('/cache', async (request, reply) => {
  await fastify.redis.set('foo', 'bar');
  return fastify.redis.get('foo');
});
```

## 6. `fastify-static`

**功能**: 提供静态文件服务。

**描述**: `fastify-static` 插件用于为 Fastify 应用提供静态文件的服务，例如 HTML、CSS、JS 文件或图片等。

**安装**:

```bash
npm install fastify-static
```

**使用**:

```js
const path = require('path');
const fastify = require('fastify')();
fastify.register(require('fastify-static'), {
  root: path.join(__dirname, 'public')
});
```

## 7. `fastify-multipart`

**功能**: 处理多部分表单数据（如上传文件）。

**描述**: `fastify-multipart` 插件用于处理来自客户端的文件上传以及多部分表单数据。

**安装**:

```bash
npm install fastify-multipart
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-multipart'));

fastify.post('/upload', async (request, reply) => {
  const data = await request.file();
  return { filename: data.filename };
});
```

## 8. `fastify-rate-limit`

**功能**: 限制请求频率，防止滥用。

**描述**: `fastify-rate-limit` 插件可以帮助你设置请求的频率限制，以防止恶意攻击或请求滥用。

**安装**:

```bash
npm install fastify-rate-limit
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-rate-limit'), {
  max: 100,
  timeWindow: '1 minute'
});
```

## 9. `fastify-sensible`

**功能**: 提供常用的实用功能。

**描述**: `fastify-sensible` 插件提供了一些常用的实用功能，例如响应头的管理、错误处理的简化、路径处理等。

**安装**:

```bash
npm install fastify-sensible
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-sensible'));

fastify.get('/hello', async (request, reply) => {
  return reply.send({ hello: 'world' });
});
```

## 10. `fastify-async-hooks`

**功能**: 支持异步钩子。

**描述**: `fastify-async-hooks` 插件提供了对 Node.js 异步钩子的支持，允许你在 Fastify 应用中追踪请求的生命周期。

**安装**:

```bash
npm install fastify-async-hooks
```

**使用**:

```js
const fastify = require('fastify')();
fastify.register(require('fastify-async-hooks'));
```

## 总结

Fastify 插件系统提供了丰富的功能，可以帮助开发者快速实现各种需求。无论是认证、跨域、性能优化还是文件上传，Fastify 都提供了成熟的插件供开发者选择。根据项目的需求，选择合适的插件能够大大提升开发效率。
