Ramda在Mongoose查询回调中不起作用

时间:2018-09-23 10:34:02

标签: node.js mongodb express mongoose ramda.js

我正在使用NodeJS,Express,Mongoose,Ramda编写REST API。我需要使用Ramda的实用程序为客户端准备响应,但是遇到一些问题:

const R = require('ramda');

router.put('/:id/update', (req, res) => {
  User.findOneAndUpdate(
    { '_id': req.params.id },
    { $set: { a: 'a' }},
    {},
    (err, newUser) => {
      if (err) {
        res.status(500).send(responseCodes.updateUserError());
      } else {
        const exemplaryObj = { a: 'a', email: 'bbb' };
        console.log(
          newUser, // { email: 'aaa', password: 'bbb' }
          R.omit(['email', 'password'], newUser), // { email: 'aaa', password: 'bbb' }
          R.omit(['email', 'password'], exemplaryObj) // { a: 'a' }
        )
      }
    }
  );
});

为什么Ramda的omit(或其他类似merge的方法)不能正常使用Mongoose查询回调返回的对象?

1 个答案:

答案 0 :(得分:3)

您可以使用 toObject 方法将返回的文档转换为纯JavaScript对象:

 R.omit(['email', 'password'], newUser.toObject())

https://mongoosejs.com/docs/api.html#document_Document-toObject

您也可以在查询链中添加 lean ,以告诉Mongoose仅返回纯JavaScript对象:

https://mongoosejs.com/docs/api.html#query_Query-lean