使用koa-router for Koa2 在接收Post的请求时候怎么拿不到提交的表单
发布于 7 年前 作者 spursy 15731 次浏览 来自 问答

router.post('/getname', async function(ctx, next) {
  		console.log(JSON.stringify(ctx.request));
	})

的方法体中,打印ctx.request 是undefined,如果直接打印ctx 我也没找到我提交的表单。 我是不是哪里写错了,请问如果使用Koa-router 获取表单?

下面是我的页面html

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
</head>
    <form class="ui form segment" action="/getname" method="post" enctype="multipart/form-data">
        <body>
            <input type="text" name="lastname" value="Mouse">
            <input type="submit" class="ui button fluid" value="登录">
        </body>
    </form>    
</html>

下面是我的基于Koa2 版本的服务端

const Koa = require('koa')
const app = new Koa()
// const router = require('./middlewares/router.js');
const bodyParser = require('koa-bodyparser')
const router = require('koa-router')()
const parse = require('co-body');

const views = require('koa-views')
const path = require('path')

// ejs template views
app.use(views(path.join(__dirname, '../views'), {
  extension: 'ejs'
}))
app.use(bodyParser())
// Add Koa Router
app
.use(router.routes())
.use(router.allowedMethods());

router.get('/getname', async function(ctx, next) {
  let title = 'Mongoose demo page'
  await ctx.render('index', {
    title,
  })
})

router.post('/getname', async function(ctx, next) {
  console.log(JSON.stringify(ctx.request));
})
app.listen(3000)
console.log('[demo] start-quick is starting at port 3000')
3 回复

1)使用ctx.request.body取值

2) 参考https://github.com/17koa/koa-generator

// middlewares
app.use(bodyparser({
  enableTypes:['json', 'form', 'text']
}))

默认只开启2种,要小心text,虽然不常用

把表单里的 "enctype="multipart/form-data" 删了就好了。 bodyparser 没有配置 enctype。也可以去看看 bodyparser 的文档里怎么配置 enctype。如果用 koa-body 这个库, 直接 require('koa-body')({multipart: true})

image.png 亲自测试过。可行

回到顶部