在我的用户编辑路径中,我试图使用Lodash合并功能来更新从req.body中发送的更新(从Mongoose中返回)的用户文档。这是我的代码:
const { dobYear, dobMonth, dobDay } = req.body;
const dob = formatDob(dobYear, dobMonth, dobDay);
const user = await db.User.findById(req.params.id);
const updates = pick(req.body, [ 'fullName', 'email', 'password', 'gender', 'address', 'avatar_url' ]);
merge(user, [updates, dob]);
let updatedUser = await user.save();
问题是,即使我在请求中发送了更新的电子邮件,合并似乎也没有实际用新的电子邮件值(来自updates
)覆盖旧的电子邮件值。
答案 0 :(得分:0)
merge(user,[updates,dob]);。
用法不正确。接受以下内容:
Arguments
object (Object): The destination object.
[sources] (...Object): The source objects.
观察...,这意味着它接受可变数量的参数。
merge(user, updates, { dob })
答案 1 :(得分:0)
您正在尝试将参数传递给merge
的方式将对象与数组合并。
See documentation。我认为您的困惑来自于文档中有_.merge(object, [sources])
的事实。但是,如果您在Arguments
部分中看到它们,则有:
[sources] (...Object): The source objects.
表示对象列表,而不是实际数组。
尝试一下:
var user = { 'a': 1, 'b': 2 };
var updates = { 'a': 3, 'c': 4, 'email': 'aaa@bbb.com' };
let dob = '11-11-2019'
let result = _.merge(user, updates, {dob}); // <-- ...Object
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>