Сохраняйте данные (изображения) на сервере NodeJS через пост-запрос ajax, используя formData - PullRequest
0 голосов
/ 28 июня 2019

после того, как я искал эту ошибку и не смог найти ответ, я решил спросить.

wrapData: function() {
    var fd = new FormData(),
        image;
    _.each(this.models, function(model, i) {
        console.log(model.toJSON());
        if (model.get('cover')) {
            fd.append("portada", model.get('file'));
        }
        image = model.get('file');
        fd.append("images", image, image.name);
    });
    return fd;
},
sync: function(method, model, options) {
    var opts = {
        url: this.url(),
        success: function(response) {
            if (options.success || false) {
                options.success(data);
            }
            console.log(response);
            return response;
        }
    };
    switch (method) {
        case "create":
            opts.type = "POST";
            opts.data = this.wrapData();
            opts.processData = false;
            opts.contentType = false;
            break;
        default:
            opts.type = "GET";
    }
    return $.ajax(opts);
},

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

if (model.get('cover')) {
   fd.append("portada", model.get('file'));
}

, и NodeJS печатает это:

name: 'MulterError',
message: 'Unexpected field',
code: 'LIMIT_UNEXPECTED_FILE',
field: 'portada'

Но, когда я пытаюсь сделать то же самое от Insomnia (REST-клиент), я не могу понять, как получен запрос.

Вот запрос от Insomnia и его ответ

Я знаю, что multer выдает эту ошибку, потому что имя 'portada' вместо имени 'images'.Но я не понимаю, почему это работает от бессонницы, а от внешнего интерфейса - нет.Вместе я пытаюсь сделать то же самое.

Буду признателен за вашу помощь.

...