javascript – Lodash与mongoose合并

前端之家收集整理的这篇文章主要介绍了javascript – Lodash与mongoose合并前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是使用express.js和mongoose的更新方法代码片段.
我正在尝试将现有的mongo实体与请求有效负载主体中的json对象合并.
exports.update = function(req,res) {
    if(req.body._id) { delete req.body._id; }
    Entity.findById(req.params.id,function (err,entity) {
        if (err) { return handleError(res,err); }
        if(!entity) { return res.send(404); }
        var updated = _.merge(entity,req.body);
        updated.save(function (err) {
            if (err) { return handleError(res,err); }
            return res.json(200,entity);
        });
    });
};

遗憾的是,这不起作用.我收到了这个错误

node_modules/mongoose/lib/document.js:1272
    doc.save(handleSave);
        ^
TypeError: Object #<Object> has no method 'save'

我已经尝试创建自己的自定义合并方法,但仍然无法实现正确的合并:

exports.update = function(req,err); }
        if(!entity) { return res.send(404); }
        var updated = merger(resume,req.body)//_.merge(resume,entity);
        });
    });
};
function merger (a,b) {
    if (_.isObject(a)) {
        return _.merge({},a,b,merger);
    } else {
        return a;
    }
};

有这种差异,我有这样的信息:

node_modules/mongoose/lib/document.js:1245
      return self.getValue(i);
              ^
TypeError: Object #<Object> has no method 'getValue'

因此,我无法将实体的值和req.body扩展到更新的目标.我估计只有结构被复制了.有人请让我知道我哪里错了.谢谢.

解决方法

我能够通过将_.merge更改为_.extend来修复此问题,然后直接在findById返回的结果上调用save而不是更新的变量.
exports.update = function(req,err); }
        if(!entity) { return res.send(404); }
         _.extend(entity,req.body);
        entity.save(function (err) {
            if (err) { return handleError(res,entity);
        });
    });
};

猜你在找的JavaScript相关文章