Ошибка приведения к массиву - PullRequest
0 голосов
/ 30 октября 2019

Я изучал множество других подобных вопросов, но, похоже, не могу понять суть этого, хотя я убежден, что это что-то очень простое. У меня есть поле выбора (с помощью плагина Chosen), которое позволяет пользователям выбирать несколько вариантов в этом поле (продвижение организаций). Поле определяется как массив, и если пользователь выбирает только один вариант, он работает нормально. Тем не менее, если они выбирают несколько, при отправке формы, я получаю эту ошибку:

Ошибка проверки события: содействие организации: сбой приведения к массиву для значения "5db5a27114e1e9001776cc7a, 5db51940b261d5001791f9aa, 5d1626445afea80fb3bb8b8b8b3bbbbbb5"*

Поле, определенное как массив в схеме event.js (со ссылкой на схему Help.js):

      {
         type: mongoose.Schema.Types.ObjectId,
         ref: "Help"
      }
   ],

Как поле определяется в newEvent.ejs:

       <label class="profile-label" for="venue">Event Organisers - Organisations:</label>
       <select class="mselect standard-input" name="event[promotingOrganisations][]" id="promoting-organisations" data-placeholder='Select multiple (if required) or leave blank' multiple>
           <% promotingOrganisations.forEach(organisation => { %>
                <option value="<%= organisation.id %>"><%= organisation.name %> <span class="display-category">(<%= organisation.category %>)</span>
                </option>
           <% }); %>
       </select>
</div>

В контроллере EventCreate:

let event = await Event.create(req.body.event);

Может кто-нибудь посоветовать, где я иду не так и почему он не позволяет сохранять несколько элементов в массиве?

Обновить:

После дальнейшего расследования я фактически установил причину проблемы;Я также использую экспресс-sanitizer в маршруте, как это:

middleware.sanitizeFields(req, req.body.event);

, который определяется в файле промежуточного программного обеспечения следующим образом:

    sanitizeFields: (req, obj) => {
        for(const prop in obj) {
            obj[prop] = req.sanitize(obj[prop]);
        }
        return obj;
    }

Если я удаляю sanitizer из контроллера, массивсохраняет правильно. Итак, чтобы изменить мой первоначальный вопрос, кто-нибудь может посоветовать, как необходимо адаптировать код промежуточного программного обеспечения для захвата массивов? Спасибо

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