Ramda 在 Mongoose 查询回调中不起作用
Ramda doesn't work within Mongoose query callback
我正在使用 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 方法将 returned 文档转换为普通 JavaScript 对象:
R.omit(['email', 'password'], newUser.toObject())
https://mongoosejs.com/docs/api.html#document_Document-toObject
您也可以将 lean 添加到查询链中,以告诉 Mongoose return 只是普通的 JavaScript 对象:
我正在使用 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 方法将 returned 文档转换为普通 JavaScript 对象:
R.omit(['email', 'password'], newUser.toObject())
https://mongoosejs.com/docs/api.html#document_Document-toObject
您也可以将 lean 添加到查询链中,以告诉 Mongoose return 只是普通的 JavaScript 对象: