При загрузке файлов, происходит нарушение последовательности, в результате чего, имя файла не удается корректно обновить и поле коллекции
filename
остается пустым.
const router = require('express').Router();
const mongoose = require("mongoose");
const multer = require('multer');
const aws = require('aws-sdk');
const multerS3 = require('multer-s3');
const Collection = require("../models/ts");
aws.config.update({
secretAccessKey: process.env.ACCESS_KEY,
accessKeyId: process.env.ACCESS_KEY_ID,
region: process.env.REGION
});
const s3 = new aws.S3();
const upload = multer({
storage: multerS3({
s3: s3,
bucket: 'site.com',
acl: 'public-read',
key: function (req, file, cb) {
cb(null, path);
Collection.update({ vid: req.body.vid }, { $set: {
filename: file.originalname,
} })
.exec()
.then(result => {
console.log('Название файла успешно сохранено');
})
.catch(err => {
console.log(err);
});
}
})
}).any();
router.post("/", upload,(req, res, next) => {
switch(req.body.cs) {
case "addCollection":
const ts = new Collection({
_id: new mongoose.Types.ObjectId(),
vid: req.body.vid,
filename: ''
});
ts.save()
.then(result => {
if(result){
console.log('Данные успешно записан в коллекцию');
} else {
console.log('Данные в коллекцию не записаны');
}
})
.catch(err => {
console.log('Ошибка записи в коллекцию');
});
res.status(200).json({
"result":"ok",
});
break;
case "addFilename":
upload(req, res, function (err) {
if(err) {
console.log('Ошибка загрузки файлов');
res.status(500).json({
Error: "Ошибка загрузки файлов"
});
}
res.status(200).json({
"result":"ok",
});
});
break;
}
});
В 2х словах, в addCollection происходит сохранение полей, с пока пустым полем filename, а в addFilename уже получаем сам файл и обновляем filename его именем.
В результате кода выше, в консоли получаем следующее:
Название файла успешно сохранено
Данные успешно записан в коллекцию
Из этого следует, что обновление поля filename происходит раньше фактического появления самой записи в коллекции.
Помогите корректно обработать эту ситуацию.