Skip to content
On this page

koa-body

简介

koa-body 是一个功能强大的请求体解析中间件,支持 multipart、urlencoded 和 json 请求体。它可以处理文件上传,并提供了丰富的配置选项。

安装

bash
npm install koa-body

基本使用

javascript
const Koa = require('koa')
const { koaBody } = require('koa-body')

const app = new Koa()

// 注册中间件
app.use(koaBody())

app.use(async (ctx) => {
  // 获取请求体数据
  console.log(ctx.request.body)
  // 获取上传的文件
  console.log(ctx.request.files)
})

app.listen(3000)

高级配置

javascript
const Koa = require('koa')
const { koaBody } = require('koa-body')
const path = require('path')

const app = new Koa()

app.use(
  koaBody({
    // 支持文件上传
    multipart: true,
    formidable: {
      // 上传目录
      uploadDir: path.join(__dirname, 'uploads'),
      // 保持文件后缀
      keepExtensions: true,
      // 文件大小限制,默认2M
      maxFileSize: 200 * 1024 * 1024,
      // 文件数量限制
      maxFiles: 5,
    },
    // 解析 urlencoded
    urlencoded: true,
    // 解析 json
    json: true,
    // 解析文本
    text: true,
    // 错误处理
    onError: (err, ctx) => {
      console.error(err)
      ctx.throw(422, '文件上传失败')
    },
  }),
)

app.use(async (ctx) => {
  const file = ctx.request.files?.file
  if (file) {
    ctx.body = {
      filename: file.originalFilename,
      path: file.filepath,
    }
  } else {
    ctx.body = ctx.request.body
  }
})

app.listen(3000)

注意事项

  1. 在使用文件上传功能时,需要确保上传目录存在且有写入权限
  2. 建议设置文件大小限制,避免服务器资源被耗尽
  3. 对于大文件上传,建议使用流式处理
  4. 文件上传完成后,记得及时清理临时文件

要保持清醒 永远不抱有意外的幻想 凭空的期待最要命