Моя коллекция мангустов не сохраняет переданные данные в базу данных - PullRequest
0 голосов
/ 01 декабря 2018

Я создал свою схему с помощью mongoose, но коллекция не сохраняет переданные данные в базу данных, фактически коллекция находится в списке базы данных коллекции

Модель

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

const MovieSchema = new Schema({
	description: String,
	category: String,
	token:  String,
	fileID: {
		type: Schema.Types.ObjectId,
	}
});

const Movie = mongoose.model('Movies', MovieSchema);

module.exports = Movie;

при логистике при сохранении документов

router.post('/', upload.single('file'), (req, res) => {
    
      
    const movie = new Movie({
        description: req.body.Description,
        category: req.body.Category,
        token: req.body.Description,
        fileID: req.file.id 
    })
    movie.save(function(err){
      if(err){
           console.log(err);
           return;
      }

      res.json({ "success": "true"});
});
 
});
if i console.log(movie) i can see the objects 

1 Ответ

0 голосов
/ 01 декабря 2018

Я попытался использовать ту же настройку, что и вы:

  • Express
  • Multer
  • Multer GridFS Storage
  • Mongoose

Кажется, что он работает (получил { success: true } ответ и материал, хранящийся в БД), как показывает этот отрывок из mongo консольного сеанса:

> db.movies.find();
{ "_id" : ObjectId("5c02a7ccfe06f6644fc891e7"), "fileID" : ObjectId("5c02a7ccfe06f6644fc891d5"), "__v" : 0 }
> db.fs.files.find();
{ "_id" : ObjectId("5c02a7ccfe06f6644fc891d5"), "length" : 4265368, "chunkSize" : 261120, "uploadDate" : ISODate("2018-12-01T15:25:00.411Z"), "filename" : "d32a3c421f8b7bb1654f2abe13e9cf0f", "md5" : "c6203a2cfee5169a8c90015b99bb7844", "contentType" : "image/jpeg" }

Вот мои файлы.

Файл приложения Main Express

// index.js
const express = require('express');
const mongoose = require('mongoose');
const moviesRouter = require('./routes/movies');

mongoose.connect('mongodb://localhost:27017/movies');

const app = express();

app.use(express.static('public'));
app.use('/api/movies', moviesRouter);

app.listen(8000);

Модель фильмов (такая же, как у вас)

// models/Movie.js
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const MovieSchema = new Schema({
    description: String,
    category: String,
    token:  String,
    fileID: {
        type: Schema.Types.ObjectId,
    }
});

const Movie = mongoose.model('Movies', MovieSchema);

module.exports = Movie;

Маршрут фильмов (в основном ваш код тоже)

// routes/movies.js
const express = require('express');
const multer  = require('multer');

const router = express.Router();
const Movie = require('../models/Movie');

// Create a storage object with a given configuration
const storage = require('multer-gridfs-storage')({
  url: 'mongodb://localhost:27017/movies'
});

// Set multer storage engine to the newly created object
const upload = multer({ storage: storage });

router.post('/', upload.single('file'), (req, res) => {

  const movie = new Movie({
    description: req.body.Description,
    category: req.body.Category,
    token: req.body.Description,
    fileID: req.file.id 
  });
  movie.save(function(err){
    if(err){
      console.log(err);
      return;
    }

    res.json({ "success": "true"});
  });

});

module.exports = router;

HTML тестовая страница

Находится под public/index.html

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>StackOverflow mongoose/gridfs question</title>
  </head>
  <body>
    <div id="status"></div>
    <form id="movie" method="POST" enctype="multipart/form-data">

      <label for="file">Choose movie</label>
      <input id="file" type="file" name="file" />

      <input type="submit" value="Send" />
    </form>
    <script>
      const status = document.getElementById('status');
      const form = document.getElementById('movie');
      const fileInput = document.getElementById('file');
      console.log(fileInput);
      form.addEventListener('submit', event => {
        event.preventDefault();
        const formData = new FormData();
        formData.append('file', fileInput.files[0]);

        var request = new XMLHttpRequest();
        request.open('POST', '/api/movies');
        request.onload = function(event) {
          if (request.status == 200) {
            status.innerHTML = 'Sent!';
          } else {
            status.innerHTML = `Error: ${request.status}`;
          }
        };

        request.send(formData);
      });
    </script>
  </body>
</html>

Поскольку у меня нет всего вашего кода, трудно точно понять, в чем проблема:

  • Ваша база данных Монго настроена?(например, use movies;)
  • Есть ли проблема в способе кодирования данных при отправке их на сервер (необходимо иметь кодировку multipart/form-data, см. скриншот) StackOverflow mongoose/multer gridfs post

Надеюсь, это поможет.

...