向我的API发送修补程序请求时,getUpdate Handler会针对架构中所需的字段抛出验证错误

时间:2017-01-20 16:42:56

标签: mongodb mongoose keystonejs

//以下代码有效,但我对它不满意。如果没有显示的修复程序,则会抛出验证错误。

exports.update = function(req,res) {

    List.model.findById(req.params.id).exec(function(err, item) {

        if (err) return res.apiError('database error', err);
        if (!item) return res.apiError('not found');

//这里我尝试过PATCH和POST

        var data = (req.method == 'PATCH') ? req.body : req.query;

//我添加了这一行来修复错误。

        if (!data.email) {
            data.email = item.email
        }

// getUpdateHandler抛出错误

        item.getUpdateHandler(req).process(data, function(err) {

//这是我的邮递员请求

/api/item/update/58814243317de2ce8d8090fd

//删除上面的修复

时出现错误
{
  "error": "create error",
   "detail": {
       "message": "Validation failed",
       "name": "ValidatorError",
       "errors": {
            "email": {
                "name": "ValidatorError",
                "path": "email",
                "message": "Email is required",
                "type": "required"
            }
       }
   }
}

//更新。我的问题:在get req上设置布局时,我没有将所需的值传递给表单。因此,未更新的值将被发布为null。如果它是必填字段,则会引发错误。固定

1 个答案:

答案 0 :(得分:0)

您可以通过传递options.fields(请参阅here)为更新处理程序提供要处理的字段列表。那么也许你可以确定在请求中发送了哪些字段,并告诉更新处理程序只处理这些字段?