node.js - Ramda 在 Mongoose 查询回调中不起作用

标签 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 查询回调返回的对象不能按预期工作?

最佳答案

您可以使用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

关于node.js - Ramda 在 Mongoose 查询回调中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52465245/

相关文章:

node.js - Mongoose 发现卡在上面返回的 101 项

java - Spring数据mongo中的Mongodb $lookup

node.js - 如何在 Node.js 中使用相同的键设置多个 http header 字段?

javascript - Passport 认证失败导致重定向循环

javascript - 如何使用nodejs获取uber api访问 token

node.js - Nodejs-console.error vs util.debug

angularjs - 如何使用mean.io运行简单的hello world应用程序

node.js - 导出 Node.js 模块中的对象

mysql - 使用 Neo4j 作为独立数据库的风险

mongodb - Meteor MongoDB 中的自定义排序