express - 在 foreach 循环中更新数据库
问题描述
当我运行这段代码
router.post('/admin', ensureAuthenticated, async (req, res) => {
try {
const{ truckDriver, truckNumber, admin, customer, loadPlanning } = req.body;
await User.find({isVerified: true}, function(err,data){
adminArray = data;
for(var key in req.body) {
if(req.body.hasOwnProperty(key)){
adminArray.forEach(function(data){
if(truckDriver == data.email){
console.log(truckDriver);
User.findOneAndUpdate({email: data.email}, {truckDriver: true});
}
if(truckNumber == data.email){
console.log(truckNumber);
User.findOneAndUpdate({email: data.email}, {truckNumber: truckNumber});
}
if(admin == data.email){
console.log(admin);
User.findOneAndUpdate({email: data.email}, {admin: true});
}
if(customer == data.email){
console.log(customer);
User.findOneAndUpdate({email: data.email}, {customer: true});
}
if(loadPlanning == data.email){
console.log(loadPlanning);
User.findOneAndUpdate({email: data.email}, {loadPlanning: true});
}
});
}
}
})
req.flash('success_msg', 'Your accounts have been processed!');
res.redirect('/admin');
}
catch (e){
res.send('error_msg');
console.log(e);
};
});
console.log 将输出用户的电子邮件,但不会更新用户帐户。我可能做错了什么?提前谢谢你,我对此感到非常困惑
解决方案
我可以看到您的代码存在一些问题。data
您从回调函数中获得的变量和data
inadminArray.forEach(function (data)
是两个不同的值。第一个应该是您分配给的数组,adminArray
第二个是您尝试访问该email
属性的对象。这可能是您遇到问题的原因。
因此,该行将User.findOneAndUpdate({email: data.email}, {truckDriver: true});
不起作用,因为有可能email
未定义 的值,在这种情况下,findOneAndUpdate
将使用 调用{ email: undefined }
。
顺便说一句,因为您正在处理回调函数,所以不需要await
此行上的 。await User.find({ isVerified: true }, function (err, data) {...});
我已经稍微重构了你的代码,见下文:
router.post('/admin', ensureAuthenticated, async (req, res) => {
try {
const { truckDriver, truckNumber, admin, customer, loadPlanning } = req.body;
const adminArray = await User.find({ isVerified: true });
if (!adminArray) {
return;
}
for (var key in req.body) {
if (req.body.hasOwnProperty(key)) {
adminArray.forEach(function (data) {
if (truckDriver == data.email) {
console.log(truckDriver);
User.findOneAndUpdate({ email: data.email }, { truckDriver: true });
}
if (truckNumber == data.email) {
console.log(truckNumber);
User.findOneAndUpdate({ email: data.email }, { truckNumber: truckNumber });
}
if (admin == data.email) {
console.log(admin);
User.findOneAndUpdate({ email: data.email }, { admin: true });
}
if (customer == data.email) {
console.log(customer);
User.findOneAndUpdate({ email: data.email }, { customer: true });
}
if (loadPlanning == data.email) {
console.log(loadPlanning);
User.findOneAndUpdate({ email: data.email }, { loadPlanning: true });
}
});
}
}
req.flash('success_msg', 'Your accounts have been processed!');
res.redirect('/admin');
}
catch (e) {
res.send('error_msg');
console.log(e);
};
});
让我知道这是否有效,如果您看到错误也让我知道错误。干杯。
推荐阅读
- python - Tkinter 窗口中 DateEntry 的行为
- xcode - 如何在 Xcode 中创建自定义 SwiftUI View Playground 模板?
- css - 在不同的 bootstrap4 标签栏之间移出和移入内容
- c# - Regex.Replace 或 String.Replace 不适用于 Linux 环境中的主机 URL
- ios - 控制台中lldb中的Xcode12 po命令在范围内找不到变量
- java - 这个关键字在 lambda 表达式中指向哪个对象?
- python - 如何在python中找到具有重复元素的元组?
- sql - 从 SQL Server / ORACLE 路径中提取文件夹名称和级别
- ruby-on-rails - rails around_action 如何与 return 语句一起使用
- sorting - 排序算法选择