问题现象:
今天新搭建了一个koa的脚手架,发现不能正常解析移动端传过来的post,或者post的参数传nil可以解析,传参数就不可以,客户端那边的ContentType是text/plain,错误内容:
JSON text did not start with array or object and option to allow fragments not set.” UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set., NSUnderlyingError=0x28318b060 {Error Domain=com.alamofire.error.serialization.response Code=-1011 “Request failed: unsupported media type (415)” UserInfo={NSLocalizedDescription=Request failed: unsupported media type (415), NSErrorFailingURLKey=http://apppreview.frpgz1.idcfengye.com/api/getAppPreviewQAList, com.alamofire.serialization.response.error.data={length = 30, bytes = 0x73706563 69666965 6420656e 636f6469 … 7570706f 72746564 }
因为koa无法解析post,所以需要中间件,脚手架默认使用的koa-body
route这边使用的是require(‘koa-body’);
设置如下:
app.use(koaBody({
multipart:true, // 支持文件上传
encoding:'gzip',
formidable:{
uploadDir:path.join(__dirname,appConfig.upload.dir), // 设置文件上传目录
keepExtensions: true, // 保持文件的后缀
maxFieldsSize:appConfig.upload.size, // 文件上传大小限制
onFileBegin:(name,file) => { // 文件上传前的操作
},
}
}));
这样设置无法正确解析post请求,后来又加了require(‘koa-bodyparser’);,
app.use(bodyParser1({
// enableTypes: ['text/plain', 'text'],
// onerror: function (err, ctx) {
// ctx.throw('body parse error', 422);
// }
}));
但是发现还是不行,一想,难道是koa-body不行,两个都用后面的无效?
遂把koa-body去掉。果然就可以了。
解决方法:
只使用require(‘koa-bodyparser’);,即可。
分析:
但是目前大多数都是用koa-body代替了bodyparser,正常也是body可以解析post,这次不知道是为什么除了问题,有时间再研究下。