跳到主要内容

koa-body

一、认识


koa-body 是专门为 Koa 框架设计的中间件,其主要功能是解析 HTTP 请求体数据,支持多种格式,方便在服务端获取请求中提交的数据。支持的格式如下:

  • XML 格式: text/xmlapplication/xml

  • Form: application/x-www-form-urlencoded

  • JSON 格式: application/jsonapplication/json-patch+jsonapplication/vnd.api+jsonapplication/csp-reportapplication/reports+jsonapplication/scim+json

  • Text 格式: text/plain

  • FormData 格式: multipart/form-data

koa-bodykoa-multer 相比: 专门用于处理文件上传,支持 multipart/form-data。主要关注文件上传,不处理 JSONURL 编码数据的解析。

koa-bodykoa-bodyparser 相比: koa-bodyparser 专注于解析 application/jsonapplication/x-www-form-urlencoded。 不支持文件上传,无法处理 multipart/form-data

因此 koa-body 代替了 koa-bodyparserkoa-multer。只需使用 koa-body 一个中间件即可实现 post` 请求

二、API


三、语法


const Koa = require("koa");
const KoaBody = require("koa-body");
const KoaRouter = require("koa-router");

const PORT = 3000;
const app = new Koa();
const { koaBody } = KoaBody;
const router = new KoaRouter();

const getDetail = async (ctx)=>{
const id = ctx.params.id || ctx.query.id;
console.log("id", id);
}

const editItem = async (ctx)=>{
const { body } = ctx.request;
const id = ctx.params.id || body.id;

console.log("id", id);
console.log("body", body);
}

router.get("/getList", getList);
router.get("/getDetail", getDetail);
router.get("/getDetail/:id", getDetail);

router.post("/addItem", addItem);
router.post("/editItem", editItem);
router.post("/editItem/:id", editItem);
router.post("/removeItem", removeItem);
router.post("/removeItem/:id", removeItem);

app.use(
koaBody({
text: true,
json: true,
encoding: "gzip",
multipart: true,
urlencoded: true,
formidable: {
uploadDir: uploadDir,
keepExtensions: true,
},
})
);

app.use(router.routes()).use(router.allowedMethods());

app.listen(port, () => {
console.log("Koa 服务启动成功!!!");
});

参考资料


koa2 使用 koa-body 代替 koa-bodyparser 和 koa-multer