首頁  >  問答  >  主體

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

利用node,想要通过表单传递值,node的代码如下:

var express=require('express'),
    //form的get方法使用url模块
    url=require('url'),
    //form的post方法使用url模块
    bodyParser=require('body-parser'),
    multer=require('multer'),
    util=require('util'),
    app=express();

app.use(multer({dest:'./'}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));

app.get('/',function(req,res){
    res.sendfile('./index.html');
});

app.post('/reg',function(req,res){//页面是post,服务器端也是要post
    var urlObj=url.parse(req.url,true);
    res.write(util.inspect(req.files));
    res.end(JSON.stringify(req.body));
});

app.listen(8080);

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

运行抛出的错误如下:

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

在stackoverflow上查找到类似的问题,但是他的原因是所使用的包的问题stackoverflow问题。
我查看了multer的文档,好像它并没有做出类似的改变。特意向大家请教这个问题

ringa_leeringa_lee2713 天前1256

全部回覆(4)我來回復

  • 怪我咯

    怪我咯2017-04-17 13:01:06

    這個問題以及解決了,是multer版本的問題。 multer 需要裝 0.1.8 的版本。

    npm install multer@0.1.8 

    回覆
    0
  • 迷茫

    迷茫2017-04-17 13:01:06

    我現在升級multer 1.1.0了,也碰到同樣問題,然後去他的官網了解下。

    已經不能這樣寫了

    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[i]);
        }
        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是可选

    希望幫助後面的nodejs學習者

    回覆
    0
  • 阿神

    阿神2017-04-17 13:01:06

    我也碰見了這個問題,請問您解決了嗎?

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 13:01:06

    我今天也遇到了這個問題了,然後今天順便研究了一下,你如果要用v1.1.0版本的話可以參考我的代碼

    // 文件上传插件
    var multer = require('multer');
    var storage = multer.diskStorage({
      destination: function (req, file, cb) {
        cb(null, './public/images/user')
      },
      filename: function (req, file, cb) {
        cb(null, file.originalname)
      }
    });
    var upload = multer({ storage: storage });
    var cpUpload = upload.any();
    app.use(cpUpload);

    回覆
    0
  • 取消回覆