doubleyong
管理员
管理员
  • 最后登录2025-12-02
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:8160回复:0

express+multer抛出错误:'app.use() requires middleware functions'

楼主#
更多 发布于:2017-10-30 23:19
使用express4. bodyParser不在提供文件上传的功能,要使用文件上传,需要使用到中间件multer.
下载模块,并且进行引用 。

multer=require('multer')

然后进行配置

app.use(multer({dest:'./'}));

目前express版本是4.13.3,multer的版本是1.0.1

运行时,却直接报错。错误如下:

throw new TypeError('app.use() requires middleware functions');

最后,通过百度找到了原因,是multer的版本问题。

解决方法有两个:
  1.  multer 需要装 0.1.8 的版本。

        npm install multer@0.1.8

   2. 版本不变,继续使用
1.0.1
   那已经不能这样写了
            app.use(multer({dest:'./'}));


    你要在路由里面写
     var multer = require('multer');
     var upload = multer({dest: './public/images/user'});
     router.post('/upload', upload.fields([
          {name: 'file1'},
          {name: 'file2'},
          {name: 'file3'},
          {name: 'file4'},
          {name: 'file5'}
          ]), function(req, res, next){
                 for(var i in req.files){
                       console.log(req.files);
                      }
          req.flash('success', '文件上传成功!');
          res.redirect('/upload');
});
上面这个例子是我同时提交5个name,
他提供3个方法 .single() .array() .fields()
.single()是一个文件
例如


upload.single('avatar')//avatar是name名
.array()是同样name名的多个文件
例如


upload.array('photos', 12)//photos是name名,第二个参数是最大12个为name名的文件
.fields()是多个文件
例如


upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }]) //maxCount是可选
参考:https://segmentfault.com/q/1010000003050818

最新喜欢:

饼干.饼干.
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号