用的是formidable,没有用koa-formidable,遇到了个问题,await next()没有继续派发路由。
Api路由
router.post('/upload',loginCheck,customFormmidable(),async (ctx,next) => {
console.log(ctx.request.files)
ctx.body = 123
})
封装的formidable
const formidable = require('formidable')
const http = require('http')
const util = require('util')
const path = require('path')
const { ErrorModel } = require('../model/ResModel')
const { uploadFileFailInfo } = require('../model/errorInfo')
/**
* formidable 封装
* @method customFormmid
* @param {Object} ctx koa2ctx
* @returns {Function}
*/
function customFormmidable(option) {
console.log('ccc')
async function fn(ctx,next) {
// 初始化
const form = new formidable.IncomingForm()
// 文件保存目录
form.uploadDir = path.join(__dirname,'..','..','/upload')
// 扩展
form.keepExtensions = true
// 文件大小
form.maxFileSize = 200 * 1024 * 1024
// 解析
form.parse(ctx.req, async (err, fields, files) => {
// 出错
if(err) {
return new ErrorModel(uploadFileFailInfo)
}
// 把数据挂载到ctx上
ctx.request.files = util.inspect({fields: fields, files: files})
await next()
})
}
return fn
}
老师可以看一下,我的await next() 写的地方,我是写在一个异步函数里的,我试了把next拿到form.parse外面,路由就可以继续派发了,老师知道怎么回事吗?
我自己猜测应该是koa2的 dispatch机制的问题,查了资料也没找到问题。