javascript – Lodash与mongoose合并

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

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

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

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

  1. exports.update = function(req,err); }
  2. if(!entity) { return res.send(404); }
  3. var updated = merger(resume,req.body)//_.merge(resume,entity);
  4. });
  5. });
  6. };
  7. function merger (a,b) {
  8. if (_.isObject(a)) {
  9. return _.merge({},a,b,merger);
  10. } else {
  11. return a;
  12. }
  13. };

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

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

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

解决方法

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

猜你在找的JavaScript相关文章