multer: неожиданное поле по запросу поста с аудио и графическим файлом - PullRequest
0 голосов
/ 29 сентября 2019

Моей первой попыткой было загрузить аудиофайл, и это было успешно, я использую mp3.single ('mp3File') как в документе, а затем я пытаюсь добавить другой файл, который является файлом изображения, поэтому я пытаюсь использовать multerполя, я не знаю, правильно ли я делаю, поэтому, пожалуйста, наведите меня на это,

И еще одна вещь, я пытаюсь сохранить файл как file.originalname, но это неt работать так

вот мой serve.js

require("dotenv").config();
const express = require("express");
const mongoose = require("mongoose");

const app = express();
const port = 3334 || 5000;

app.use(express.json());
app.use(express.static("public"));

const url = process.env.MONGO_URL;
mongoose.connect(url, { useCreateIndex: true, useNewUrlParser: true });
const db = mongoose.connection;
db.on("error", error => console.log(error));
db.once("open", () => console.log("Connected to database"));

const songRouter = require("./routes/song");
app.use("/song", songRouter);

// 400 Error setup
app.use((req, res, next) => {
  const error = new Error("Not Found");
  error.status(400);
  next(error);
});
// ============================================= //
// 500 Error setup
app.use((error, req, res, next) => {
  res.status(error.status || 500);
  res.json({
    error: {
      message: error.message
    }
  });
});

app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});

модели

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const songSchema = new Schema({
  song: { // name of song
    type: String,
    required: true
  },
  singer: { // names of singer
    type: [String]
    // type: Schema.Types.ObjectId,
    // ref: "Singer"
  },
  featureSinger: {
    type: [String]
    // type: Schema.Types.ObjectId,
    // ref: "Singer"
  },
  releaseDate: { // date of the song released
    type: Date
  },
  mp3File: { // audio file
    type: String,
    required: true,
    ref: "/public/mp3"
  },
  coverImage: { // image file
    type: String,
    required: true,
    ref: "/public/cover"
  }
});

const Song = mongoose.model("Song", songSchema);

module.exports = Song;

маршруты

const router = require("express").Router();
const multer = require("multer");
let Song = require("../models/song.models");

// mp3 file
const storage = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "./public/mp3/");
  },
  fileName: (req, file, cb) => {
    cb(null, new Date().toISOString() + file.originalname);
    // doesnt format as its originalname
  }
});
const fileFilter = (req, file, cb) => {
  if (file.mimetype === "audio/mpeg") {
    cb(null, true);
  } else {
    cb(new Error("You can only upload mp3 file"), false);
  }
};
const mp3 = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024 * 10
  },
  fileFilter: fileFilter
});

// image file
const store = multer.diskStorage({
  destination: (req, file, cb) => {
    cb(null, "./public/cover/");
  },
  fileName: (req, file, cb) => {
    cb(null, file.originalname);
    // doesnt format as its originalname
  }
});
const imageFilter = (req, file, cb) => {
  if (file.mimetype === "jpeg/png") {
    cb(null, true);
  } else {
    cb(new Error("You can only upload image file"), false);
  }
};
const imageFile = multer({
  storage: store,
  fileFilter: imageFilter
});

const music = mp3.fields([{ name: "mp3File", maxCount: 1 }]);
const cover = imageFile.fields([{ name: "coverImage", maxCount: 1 }]);

router.post("/addGroupSinger", music, cover, async (req, res) => {
  console.log(req.file);

  const data = req.body;
  const file = req.file;
  const newSong = new Song({
    song: data.song,
    singer: data.singer,
    featureSinger: data.featureSinger,
    releaseDate: Date.parse(data.releaseDate),
    mp3File: file.path,
    coverImage: file.path
  });
  try {
    let songAdded = await newSong.save();
    res.status(201).json(songAdded);
  } catch (err) {
    res.status(400).json({ message: err.message });
    console.log(err);
  }
});

module.exports = router;

Я ожидаю сэкономитьоба файла в одном запросе, но в результате я получил неожиданное поле, СПАСИБО В ADVANCE ПАРНИ: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...