Node.js 使用multer在平均堆栈中上载多个图像

Node.js 使用multer在平均堆栈中上载多个图像,node.js,angular,mongodb,mongoose,mean-stack,Node.js,Angular,Mongodb,Mongoose,Mean Stack,嘿,伙计们,我是新来的,是指堆栈开发和whle学习,我能够使用node.js中的multer将单个图像上传到mongo db,并在angular上选择1个图像。但是现在我想通过这个方法将多个图像上传到系统中。我尝试了很多可用的教程,但到目前为止都是徒劳的。如果有人能帮我 我的角度HTML代码: 岗位控制员 exports.createPost = (req, res, next) => { const url = req.protocol + '://' + req.get(

嘿,伙计们,我是新来的,是指堆栈开发和whle学习,我能够使用node.js中的multer将单个图像上传到mongo db,并在angular上选择1个图像。但是现在我想通过这个方法将多个图像上传到系统中。我尝试了很多可用的教程,但到目前为止都是徒劳的。如果有人能帮我

我的角度HTML代码:

岗位控制员

exports.createPost = (req, res, next) => {
      const url = req.protocol + '://' + req.get("host");
      const post = new Post({
        //basic car info
        city: req.body.city,
        make: req.body.make,
        model: req.body.model,
        registrationcity: req.body.registrationcity,
        mileage: req.body.mileage,
        exteriorcolor: req.body.exteriorcolor,
        description: req.body.description,
    
        //price
        price: req.body.price,
    
        //images
        imagePath: url + "/images/" + req.file.filename,
    
        //addition information
        enginetype: req.body.enginetype,
        enginecapacity: req.body.enginecapacity,
        transmission: req.body.transmission,
        assembly: req.body.assembly,
        features: req.body.features,
    
        //contact authInformation
        mobilenumber: req.body.mobilenumber,
        /*
        title:req.body.title,
        model:req.body.model,
        engine:req.body.engine,
        location:req.body.location,
        content:req.body.content,
        */
    
    
        creator: req.userData.userId
      });
    
    
      post.save().then(createdPost => {
    
        res.status(201).json({
          messgae: "Post Added Sucessfully",
    
    
          post:
          {
            ...createdPost,
            id: createdPost._id,
          }
        });
      }).catch(error => {
        res.status(500).json({
          messgae: "Creating Post Failed!"
        });
      });
    }
路线:

router.post("",checkAuth,  extractFile ,PostController.createPost);
img的多重授权: const multer=require('multer')

有人能帮我上传多张图片的代码吗

addPost(city: string, make: string, model: string, registrationcity: string, mileage: string, exteriorcolor: string, description: string, price: string, image: File, enginetype: string, enginecapacity: string, transmission: string, assembly: string, features: string, mobilenumber: string)
  //title:string,model:string,engine:string,location:string, content:string , image:File
  {
    //const post: Post = {id: null, title:title ,content:content};
    const postData = new FormData();
    //basic car information
    postData.append("city", city);
    postData.append("make", make);
    postData.append("model", model);
    postData.append("registrationcity", registrationcity);
    postData.append("mileage", mileage);
    postData.append("exteriorcolor", exteriorcolor);
    postData.append("description", description);

    //price
    postData.append("price", price);

    //images
    postData.append("image", image, make + model);

    //additional Information
    postData.append("enginetype", enginetype);
    postData.append("enginecapacity", enginecapacity);
    postData.append("transmission", transmission);
    postData.append("assembly", assembly);
    postData.append("features", features);

    //contact information
    postData.append("mobilenumber", mobilenumber);

    this.http.post<{ message: string, post: Post }>
      (BACKEND_URL, postData)
      .subscribe((responseData) => {

        this.router.navigate(["/"]);
      });
  }


This was the Angular Side and now its on node js side
const postSchema = mongoose.Schema({
  //title = name

  //basic car info
  city: { type:String, required:true},
  make:{ type:String, required:true},
  model:{ type:String, required:true},
  registrationcity:{ type:String, required:true},
  mileage:{ type:String, required:true},
  exteriorcolor:{ type:String, required:true},
  description: { type:String, required:true },

  //car price
  price: { type:String, required:true },

  //images
  imagePath : { type:String, required:true },

  //addtional information
  enginetype: { type:String, required:true},
  enginecapacity: { type:String, required:true},
  transmission: { type:String, required:true},
  assembly: { type:String, required:true},
  features: { type:String, required:true},

  //contacts information
  mobilenumber: { type:String, required:true},
/*
  title: { type:String, required:true },
  engine: { type:String, required:true},
  location: { type:String, required:true},
  */

  creator: { type: mongoose.Schema.Types.ObjectId, ref: "User" , require: true }
});


module.exports = mongoose.model('Post',postSchema);
exports.createPost = (req, res, next) => {
      const url = req.protocol + '://' + req.get("host");
      const post = new Post({
        //basic car info
        city: req.body.city,
        make: req.body.make,
        model: req.body.model,
        registrationcity: req.body.registrationcity,
        mileage: req.body.mileage,
        exteriorcolor: req.body.exteriorcolor,
        description: req.body.description,
    
        //price
        price: req.body.price,
    
        //images
        imagePath: url + "/images/" + req.file.filename,
    
        //addition information
        enginetype: req.body.enginetype,
        enginecapacity: req.body.enginecapacity,
        transmission: req.body.transmission,
        assembly: req.body.assembly,
        features: req.body.features,
    
        //contact authInformation
        mobilenumber: req.body.mobilenumber,
        /*
        title:req.body.title,
        model:req.body.model,
        engine:req.body.engine,
        location:req.body.location,
        content:req.body.content,
        */
    
    
        creator: req.userData.userId
      });
    
    
      post.save().then(createdPost => {
    
        res.status(201).json({
          messgae: "Post Added Sucessfully",
    
    
          post:
          {
            ...createdPost,
            id: createdPost._id,
          }
        });
      }).catch(error => {
        res.status(500).json({
          messgae: "Creating Post Failed!"
        });
      });
    }
router.post("",checkAuth,  extractFile ,PostController.createPost);
const MIME_TYPE_MAP =
{
  'image/png': 'png',
  'image/jpeg':'jpg',
  'image/jpg':'jpg'
}

const storage = multer.diskStorage({
  destination: (req, file, cb) =>
  {
    const isValid = MIME_TYPE_MAP[file.mimetype];
    let error = new Error("Invalid Extension");
    if(isValid)
    {
      error = null;
    }
    cb(error, "backend/images");
  },
  filename: (req, file, cb) =>
  {
    const name = file.originalname.toLowerCase().split(' ').join('-');
    const ext = MIME_TYPE_MAP[file.mimetype];
    cb(null, name + '-' + Date.now() + '-' + ext);
  }
});


module.exports = multer({storage: storage}).single("image");