Lodash与猫鼬合并

Mic*_*ael 7 javascript mongoose node.js express lodash

这是使用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);
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

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 = merger(resume, req.body)//_.merge(resume, req.body);
        updated.save(function (err) {
            if (err) { return handleError(res, err); }
            return res.json(200, entity);
        });
    });
};
function merger (a, b) {
    if (_.isObject(a)) {
        return _.merge({}, a, b, merger);
    } else {
        return a;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

结果,我无法扩展entityreq.body目的地的值updated.我想只有结构被复制了.有人请告诉我错误的地方.谢谢.

Mic*_*ael 10

我能够通过改变来解决这个_.merge_.extend,然后调用直接保存在返回的结果findById,而不是变量updated.

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); }
         _.extend(entity, req.body);
        entity.save(function (err) {
            if (err) { return handleError(res, err); }
            return res.json(200, entity);
        });
    });
};
Run Code Online (Sandbox Code Playgroud)