2017-08-26 39 views
2

我正在使用Multer創建上傳文件系統。我遵循Github頁面的指示,但它不起作用。我得到Multer上傳不是函數

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 !"}); 
     } 
    }); 
}); 

我得到上傳的不是功能

+2

請仔細閱讀multer doc https://www.npmjs.com/package/multer要麼使用'upload.single('avatar')'或'upload(req,res,function(err){ '''upload.single('avatar')'已經在destionation中對您的文件進行了升級,現在您可以使用'req.file'在您的路由中訪問此文件。 – Aabid

+0

看看這個答案https://stackoverflow.com/a/45755235/7635845 –

+0

請看編輯 –

回答

2

由於@Aabid中的評論,你不會告訴需要同時使用,Muller中間件和控制器上傳。

您可以使用:

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 
    }) 
}) 

所以你使用的2種方法之一,不能同時在同一時間。

+0

請看編輯 –