杂音上传不起作用

Azo*_*son 6 node.js express multer

我正在使用Multer制作上传文件系统。我按照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 !"});
      } 

  });
});
Run Code Online (Sandbox Code Playgroud)

我懂了 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 !"});
      } 
  });
});
Run Code Online (Sandbox Code Playgroud)

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 !"});
      } 
  });
});
Run Code Online (Sandbox Code Playgroud)

我上传不是功能

Ale*_*aru 5

正如@Aabid 在评论中所说的,您不需要同时使用 multer 中间件和控制器中的上传。

您可以使用:

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

或者你可以使用:

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 
  })
})
Run Code Online (Sandbox Code Playgroud)

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