【问题标题】:Mongoose: Not able to add one item in Mongoose array SchemaType. Although more than one could be addedMongoose:无法在 Mongoose 数组 SchemaType 中添加一项。虽然可以添加不止一个
【发布时间】:2020-07-18 14:49:04
【问题描述】:

下面是我的架构

var makerSchema = new mongoose.Schema({
    materials:[
        {
            type: String,
            required:[true, "Material is a required field"],
            trim:true,
            lowercase:true,
            enum:{
                values:['wood','metal','plastic','glass','concrete','other'], 
                message: 'Please choose from the given options only!'
            }
        }
    ]
},{
    timestamps:true
})

var Maker = mongoose.model('Maker', makerSchema);

下面是我的路线

router.post('/maker', async (req, res) => {
    try {
        var maker = new Maker(req.body);
        await maker.save();
        res.status(200).send();
    } catch (error) {
        if (error.name === "ValidationError") {
            let errors = {};

            Object.keys(error.errors).forEach((key) => {
              errors[key] = error.errors[key].message;
            });

            return res.status(400).send(errors);
          }
          res.status(500).send(error);
    }
})

下面是我的表单,我可以通过按住 Ctrl 并单击选项来选择多个项目。

<form action="/maker" method="POST">
    <select multiple class="form-control" id="materials" name="materials">
       <option>Wood</option>
       <option>Metal</option>
       <option>Glass</option>
    </select>
   <input type="submit" value="Submit">
</form>

但如果我选择单个选项,我会收到以下错误,尽管适用于多个选项:

{"materials.0":"Please choose from the given options only!"}

如何解决此错误并允许用户不仅选择多个选项,还允许选择单个选项?

【问题讨论】:

    标签: arrays node.js forms express mongoose


    【解决方案1】:

    我的猜测是,当只选择一种材料时,您会得到 maker.materials 的“错误”数据类型,String
    选择多种材料时,您将在路由器中收到Array&lt;String&gt;

    所以我会在保存Maker 之前检查路由器中materials 的数据类型。如果还不是,则将其转换为Array

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 2020-01-03
      • 2014-08-03
      • 2021-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多