我一直在研究许多其他类似的问题,但是尽管我深信这很简单,但似乎无法深入探讨这个问题。我有一个选择字段(使用选择插件),该字段允许用户在该字段中选择多个选项(promotingOrganisations)。该字段被定义为一个数组,并且如果用户仅选择一个选项,它将正常工作。但是,如果他们选择多个,则在提交表单时,我会收到此错误:
事件验证失败:promotioningOrganisations:在路径“ promotingOrganisations”处,值“ 5db5a27114e1e9001776cc7a,5db51940b261d5001791f9aa,5d1626445afea80f12bbc7f8”的转换为数组失败
在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);
任何人都可以告诉我哪里出了问题以及为什么不允许我将多个项目保存到阵列中吗?
更新:
经过进一步调查,我实际上已经确定了问题的根本原因;我也在这样的路线中使用Express-sanitizer:
middleware.sanitizeFields(req, req.body.event);
在中间件文件中定义的位置如下:
sanitizeFields: (req, obj) => {
for(const prop in obj) {
obj[prop] = req.sanitize(obj[prop]);
}
return obj;
}
如果我从控制器中删除了消毒剂,则阵列将正确保存。因此,要修改我的原始问题,是否有人可以建议中间件代码如何进行调整以允许捕获数组?谢谢