使用koa-router for Koa2 在接收Post的请求时候怎么拿不到提交的表单
在
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})
亲自测试过。可行