Как загрузить изображение в MongoDB и строковые данные одновременно, используя GridFS? - PullRequest
0 голосов
/ 31 декабря 2018

Пытаюсь создать приложение для загрузки и подписи изображений непосредственно на mongodb с помощью GridFs.А затем создайте API, чтобы показать эти изображения и подписи на стороне клиента.Серьезная проблема.Это мой мультер с движком памяти grdifs.Работает как шарм.

const storage = new GridFsStorage({
    url : mongoURI,
    file : (req, file) => {
        return new Promise((resolve, reject) => {
            crypto.randomBytes(16, (err, buff) => {
                if(err){
                    return reject(err);
                }
                const filename = buff.toString('hex') +                                 path.extname(file.originalname);
                    const fileInfo = {
                        filename: filename,
                        caption :  req.body.name,
                        bucketName : 'uploads'
                    };
                    resolve(fileInfo);
                });
        });
    }
});

const upload = multer({ storage });

app.post('/upload', upload.single('file'), (req, res) =>{
    res.json({file : req.file});
});

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

app.post('/upload', upload.single('file'), (req, res) =>{
    const newPost = new Post({
        caption : req.body.caption,
        image :  req.file.filename
    })
    newPost.save()
        .then(post => res.json('Posted'))
        .catch(err => console.log(err)) ;
    //res.json({file : req.file});

});Сервер просто зависает при загрузке.Итак, мой вопрос, меняет ли использование gridfs то, как мы обычно используем модели mongoose с MongoDB?

Модель My Post (post.js)

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

//Post Schema
let PostSchema = new Schema({
  caption : {
    type : String,
    required : true
  },
  image : {
    type: String,
    required: true
  }
});     

let Post = module.exports = mongoose.model('Post', PostSchema);

Я хочу использовать эту коллекцию Post, чтобы сохранить загруженное имя файла изображения вместе с подписью от клиента.Я делаю что-то не так, и мне нужна помощь.

Еще одна проблема, сейчас я использую форму для выполнения этого запроса POST.Но когда я пытаюсь использовать axios для отправки запроса на мой порт API (например, 5000) с моего клиентского порта (например, 8080), я получаю ошибку CORS.Как мне это преодолеть?

...