Express 框架死活上传不了文件的坑

出现的问题是,req.files 死活都是 undefined

这个坑,花了我 整整两小时 的时间去排!!!有木有啊有木有!!!

最后最无语的是解决办法竟然是这样地坑……


有问题当然是先谷歌了~ 得到的结果不外乎以下三种:

  1. 表单没有设置 enctype="multipart/form-data"
  2. app.js 里没有 app.use(express.bodyParser())
  3. 上传文件的 input 元素写得有问题

一一排查之后,在后台输出 req.files 依旧是 undefined

然后我就把代码通读了一遍,没有任何 typo 之类的东西。

还怀疑是浏览器的问题,换了一个传,依旧 undefined

无奈,滚去看文档。翻到 bodyParser 的时候,发现有如下内容:

app.use(express.bodyParser());

// 等同于:
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

于是我就把代码里与 express.json()expresss.urlencoded() 相关的代码删了,并把 app.use(express.bodyParser()) 提前。

然!后!就!奇!迹!般!地!好!了!有!木!有!!!

有!木!有!比!这!更!坑!爹!的!出!错!原!因!啊!有!木!有!!!

然后,呼,测试了一下,发现 express.bodyParser() 不爽的对象是 app.router,只要 bodyParser 放在 router 的后面,req.files 就一个劲地 undefined

卧槽,原因不深究了……累觉不爱 T T……