使用koa2 + koa-router ,但是获取不到post请求的request.body

小白请教,在'/'上进行表单提交发送 post 请求,但是'/link'返回的body中 request.body{}空对象,请问这是为什么呢?

const koa = require('koa')

const router = require('koa-router')()

const koaBody = require('koa-body')()

const bodyParser = require('koa-bodyparser')

const app = new koa()

app.use(bodyParser())

app.use(async (ctx, next) => {
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} -> ${ctx.url} - ${ms}ms`)
})

router.get('/',async (ctx, next) => {
  await next()
  ctx.body = `<form action='/link' method='post'><input type="text" ><input type="submit" value="OK"></form>`
})

router.get('/hello/:name', async ctx => {
  let name = ctx.params.name
  ctx.body = `<h1>Hello, ${name}!</h1>`
})

app.use(router.routes())

router.post('/link', async (ctx, next) => {
  
  ctx.response.body = {
    code:'0',
    description: 'ok',
    result: ctx.request.body
  }
})


// app.use(async ctx => {
//    ctx.body = 'hello koa2'
// })

app.listen(3000)
阅读 15.1k
4 个回答

ctx.body = `<form action='/link' method='post'><input name="name" type="text" ><input type="submit" value="OK"></form>`

输入框要有name才可以

首先处理POST请求的body必须使用另一个中间件koa-bodyparser,你没有导入,另外你中间件的顺序有问题。
路由监听事件之后先注册bodyparser,再注册router.routes(),最后监听3000端口

推荐问题
宣传栏