koa2 post请求拿不到数据

713 阅读1分钟
  1. get和delete都通过ctx.query 获取参数

  2. post和put都需要通过ctx.request.body 且需要中间件(koa-bodyparser)

// 安装
yarn add koa-bodyparser --save

// 使用
const bodyParser = require('koa-bodyparser') 
app.use(bodyParser());

router.get("/user", async (ctx)=>{ ctx.body = ctx.query }) 
router.post("/add", async (ctx)=>{ 
    console.log(ctx.request.body) 
    // ctx.body = "接收表单传来的数据" 
    ctx.body =ctx.request.body 
}) 
router.put("/user/edit", async (ctx)=>{ ctx.body =ctx.request.body }) 

router.delete("/user/delete", async (ctx)=>{ ctx.body =ctx.query })

image.png 3. koa-body

在Koa框架中,处理post请求数据的有一个koa-bodyparser模块,但是这个模块只能处理post的数据,不能够处理文件类型的传输。

koa-body不仅能处理post请求的数据,同时也能够处理文件类型的上传。传参为form-data时。

const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const Router = require('koa-router');
const body = require('koa-body');

const app = new Koa;
const router = new Router;

app.use(body()); // 不仅处理post请求的数据,也能处理文件类型

router.post('/getData', (ctx, next) => {
    const data = ctx.request.body; //获取发送的请求参数
    ctx.body = data;
    console.log(ctx.body);
})

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

app.listen(3000, () => console.log('http://localhost:3000'))

image.png 当传值为文件类型时,取值变为 ctx.request.files

const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const Router = require('koa-router');
const body = require('koa-body');
const static = require('koa-static');
const path = require('path')

const app = new Koa;
const router = new Router;

app.use(body({
    multipart: true
})); 

router.post('/getData', (ctx, next) => {
    const files = ctx.request.files; //获取上传的image数据
    ctx.body = files;
    console.log(ctx.body);
})

app.use(static(path.join(__dirname, '/public')));

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

app.listen(3000, () => console.log('http://localhost:3000'))