请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于封装formidable遇到的问题

用的是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机制的问题,查了资料也没找到问题。

正在回答 回答被采纳积分+3

1回答

双越 2019-12-25 08:56:29

这种问题,不要放在项目环境中,要单独、专门为 formidable 做一个 demo 。里面就有 koa2 和 formidable ,其余的什么都没有,运行看看能否成功?抛开其他工具和代码的影响,才能定位问题。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕斯0315010 #1
    老师我建了个demo测试还是不行,应该是await next的问题,我把中间件抽离成一个utils方法,返回promise就可以完成上传。
    
    而且写成中间件的形式,还会导致formidable上传的图片不完整只有一部分。
    
    老师你知道这个await next为什么不行吗
    回复 有任何疑惑可以回复我~ 2019-12-25 11:01:17
  • 双越 回复 提问者 慕斯0315010 #2
    你打断点了?确定真的走到 await next() 了?
    回复 有任何疑惑可以回复我~ 2019-12-25 19:16:34
  • 提问者 慕斯0315010 回复 双越 #3
    是的老师,我打了断点,调试发现,最后进入formidable的await next里了,然后单步调试发现进入了node_modules\_graceful-fs@4.2.3@graceful-fs\graceful-fs.js 这个文件里直接就结束了,没有执行后续的中间件。
    
    截图发在群里了
    回复 有任何疑惑可以回复我~ 2019-12-25 19:46:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信