Невозможно создать новый объект в MongoDB - схема имеет массив, но не может передать в массив - PullRequest
0 голосов
/ 07 января 2019

При создании нового объекта для добавления в MongoDB, одним из моих требований является загрузка файла изображения на сервер с использованием функции multer. Изображение успешно загружено в локальный репозиторий и сгенерирован путь к файлу. Я пытаюсь сохранить сгенерированные пути к файлам в mongodb через массив Pictures, но не смог POST массив путей к файлам.

Я погуглила эту проблему и не смогла найти решение.

В настоящее время работает Angular 5, Mongo db v3.6.3 с multer 1.4.1. Я использую Node.js в качестве моего сервера.

Это схема:

var FiguredataSchema = new mongoose.Schema({
    name: {type: String, required: true},
    releasedate: {type: Date, required: true},
    announcedate: {type: Date},
    brand: {type: String, required: true},
    series: {type: String, required: true},
    number: {type: Number},
    manufacturer: {type: String},
    distributor: {type: String},
    releaseprice: {type: Number},
    currencytype: {type: String, default: "USD"},
    notes: {type: String},
    pictures: {type: Array},
    thumbnail: {type: String}
},{timestamps: true});

Это путь POST:

app.post('/add', upload.array("uploads[]",10), function(request, response){ //ADD FIGURE TO DB
    var dict = request.files;
    var name = request.body.name;
    var releasedate = request.body.releasedate;
    var announcedate = request.body.announcedate;
    var brand = request.body.brand;
    var series = request.body.series;
    var number = request.body.number;
    var manufacturer = request.body.manufacturer;
    var distributor = request.body.distributor;
    var releaseprice = request.body.releaseprice;
    var currencytype = request.body.currencytype;
    var notes = request.body.notes;

    if(request.files == null){
        console.log("errortype", request)
    }
    else{
        console.log("else")
        var newfigure = new Figuredata(
            {
            name: name,
            releasedate: releasedate,
            announcedate: announcedate,
            brand: brand,
            series: series,
            number: number,
            manufacturer: manufacturer,
            distributor: distributor,
            releaseprice: releaseprice,
            currencytype: currencytype,
            notes: notes,
            pictures: []
            }
        )
        for(var i = 0; i < dict.length; i++){
            for(var key in dict[i]){
                if(key == "path"){
                    newfigure.pictures.push(dict[i][key]); 

                }
            }
        }
        console.log("log",newfigure.pictures)
        newfigure.save(function(error){
            if(error){
                response.json({message: "Error", error: error});
            }
            else{
                response.json({message: "success!", data: newfigure});
            }
        });
    }})

Ожидаемый результат - увидеть объект со следующим результатом (извините за глупые даты, когда я его тестировал):

{
"_id" : ObjectId("5c319fdb41c91e0663c2d008"),
"currencytype" : "JPY",
    "pictures" :[
"images/pictures/43958469.2_4589642701118_primary.jpg",
"images/pictures/1543613133070.jpg","images/pictures/1545875011468.jpg"],
    "name" : "1212121",
    "releasedate" : ISODate("2019-12-12T00:00:00.000Z"),
    "announcedate" : ISODate("2018-12-12T00:00:00.000Z"),
    "brand" : "adfasdf",
    "series" : "asdfasd",
    "number" : 1212121212,
    "manufacturer" : "waefasdf",
    "distributor" : "efsdfsdf1",
    "releaseprice" : 1000,
    "notes" : "sdfasdfasdfsadf",
    "createdAt" : ISODate("2019-01-06T06:27:39.703Z"),
    "updatedAt" : ISODate("2019-01-06T06:27:39.703Z"),
    "__v" : 0
}

Однако, когда происходит обращение к POST-пути, оно не сохраняет, а скорее удаляет response.json ({сообщение: «Ошибка», ошибка: ошибка}); Изображения сохраняются в ожидаемой области, но пути к файлам и весь объект Монго не сохраняются, что приводит к ошибке.

Спасибо за чтение.

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