Multer上传不是一个function

我正在使用Multer来创build上传文件系统。 我遵循Github页面的指示,但它不工作。 我明白了

const express= require('express'); const app = express(); const multer = require('multer'); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, '/uploads'); }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()); } }); const upload = multer({ storage: storage }); app.post('/editPhoto',upload.single('avatar'),function(req,res,next){ upload(req,res,function(err){ if(err){ res.json({success:false,message:err}); } else{ res.json({success:true,message:"Photo was updated !"}); } }); }); 

TypeError: upload is not a function

我究竟做错了什么 ?

编辑

我按你所说的做了,正如文件所说的那样。

 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads'); }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()); } }); app.post('/editPhoto',function(req,res,next){ var upload = multer({ storage:storage}).single('userPhoto'); upload(req,res,function(err){ console.log(req.file); if(err){ res.json({success:false,message:err}); } else{ res.json({success:true,message:"Photo was updated !"}); } }); }); 

req.file是未定义的

当我尝试这样的

 var upload = multer({ storage:storage}); app.post('/editPhoto',function(req,res,next){ upload(req,res,function(err){ console.log(req.file); if(err){ res.json({success:false,message:err}); } else{ res.json({success:true,message:"Photo was updated !"}); } }); }); 

我得到上传不是一个function

正如@Aabid在评论中所说的,你不需要同时使用这两个中间件,在控制器中上传。

您可以使用:

 app.post('/editPhoto', upload.single('avatar'), (req, res, next) => { // here in the req.file you will have the uploaded avatar file }) 

或者你可以使用:

 app.post('/editPhoto', (req, res, next) => { upload(req, res, function (err) { if (err) { // This is a good practice when you want to handle your errors differently return } // Everything went fine }) }) 

所以你使用两种方法中的一种,而不是同时使用两种方法。