2017-08-26 13 views
2

私はMulterを使用してアップロードファイルシステムを作成しています。私はGithubのページの指示に従ったが、うまくいかない。私は私が私が間違っているのは何TypeError: upload is not a functionmulterのアップロードは関数ではありません

取得

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

    }); 
}); 

を取得しますか?

EDIT

あなたが言ったように私がやったとドキュメントが言うように。

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

ようにしようとしたとき、私は@Aabidはあなたがしませんコメントで語った通り、アップロードが機能

+2

「upload.single( 'avatar')」または「upload(req、res、function(err){{{{{{{{{{ '.' upload.single( 'avatar')'はすでにdestionationであなたのファイルをuplodedしていますので、 'req.file'を使ってルート内のこのファイルにアクセスすることができます。 – Aabid

+0

この回答を見るhttps://stackoverflow.com/a/45755235/7635845 –

+0

編集をご覧ください –

答えて

2

ではありません取得Multerミドルウェアとコントローラのアップロードの両方を使用する必要があります。

あなたは使用することができます。

あなたが使用することができます
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

編集を見てください –

関連する問題