Изображение не сохраняется в моей базе данных, но оно загружается в мое приложение express. Используется multer и mongodb - PullRequest
0 голосов
/ 05 апреля 2020

Вот мой код:

post. js: Настройка мультера и настройка маршрута, включая сохранение в базе данных отсюда:

const express = require("express");
const router = express.Router();
const passport = require("passport");

// Post model
const Post = require("../../models/Post");
//Multer Setup_______________________________________________________________________________
const multer = require("multer");

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, "uploads")
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + file.originalname);
    //cb(null, new Date().toISOString() + file.orignalname)
  }
})
const fileFilter = (req, file, cb) => {
  //reject a file
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png' || file.mimetype === 'image/jpg') {
    cb(null, true);
  } else {
    cb(null, false)
  }
}
const upload = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024
  },
  fileFilter: fileFilter
});
//Multer Setup done_______________________________________________________________________________




// @route   POST api/posts/images
// @desc    Create an image post
// @access  Private
router.post(
  "/images",
  passport.authenticate("jwt", {
    session: false,
  }),
  upload.single("postImg"),
  (req, res) => {
    const newPost = new Post({
      user: req.user.id,
      superName: req.user.superName,
      avatar: req.user.avatar,
      title: req.body.title,
      postImg: req.file.path
    });
    newPost.save().then((post) => res.json(post)).catch((err) =>
      res.status(404).json({
        err: err,
      })
    );;
  }
);

Вот моя база данных Model Post. js:

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

// Create Schema
const PostSchema = new Schema({
  user: {
    type: Schema.Types.ObjectId,
    ref: "usersC3",
  },
  superName: {
    type: String,
  },
  avatar: {
    type: String,
  },
  title: {
    type: String,
    required: true,
  },
  text: {
    type: String,
  },
  postImg: {
    Type: String
  },
  likes: [{
    user: {
      type: Schema.Types.ObjectId,
      ref: "usersC3",
    },
  }, ],
  comments: [{
    user: {
      type: Schema.Types.ObjectId,
      ref: "usersC3",
    },
    text: {
      type: String,
      required: true,
    },
    avatar: {
      type: String,
    },
    likes: [{
      user: {
        type: Schema.Types.ObjectId,
        ref: "usersC3",
      },
    }, ],
    date: {
      type: Date,
      default: Date.now,
    },
  }, ],
  date: {
    type: Date,
    default: Date.now,
  },
});

module.exports = Post = mongoose.model("post", PostSchema);

Это моя файловая структура, и изображения успешно сохраняются в папке загрузок:

enter image description here

Проблема в том, что URL изображения не сохраняется в моей базе данных. Остальные все значения сохраняются без проблем, и ошибки не отображаются.

Я попытался распечатать "req.file.path", который я хочу сохранить в базе данных, и он выходит в быть строковым значением, т.е. как и ожидалось. Просто не понимаю, где проблема. Вот страница моего почтальона с запросом на обслуживание

enter image description here

...