我正在从req.body获取姓名和地址
const {name, address} = req.body;
我正在使用Mongoose.find检查数据库中是否已经存在名称和地址。
我通过以下方式进行处理。
Token.find({$or: [{name, address}]}, (err, existingName) => {
if ( *name matches*) {
if ( *address matches* ) {
// Do nothing.
}
// If address does not match.
// Update address
}
// If name does not match
// Create a new entry
}
问题
我的方法是错误的还是有更好的方法?谢谢您的帮助。
答案 0 :(得分:1)
首先,您需要了解此行的作用。
Token.find({$or: [{name, address}]}, (err, existingName) => { }
此行等效于:
SELECT * FROM * WHERE NAME=NAME OR ADDRESS=ADDRESS
现在,这不是您要实现的目标。您要检查名称是否存在,然后检查该名称的地址。因此,您的方法将失败。
新方法:使用Promise或Async / Await 对于您的情况,您将查询名称(暂停一段时间)并查询地址。因此,请执行以下操作:
let findName = () => {
return new Promise(function(resolve, reject) {
Token.findOne({name})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
let findAddress = () => {
return new Promise(function(resolve, reject) {
Token.findOne({address})
.exec(function(err, data) {
// Handle error.
// Resolve or Reject
})
})
}
现在消耗那个诺言。
findName().then(findAddress).then(() => {
if(//name exists) {
if(//address exists) {
// Do nothing
}
// Update address
}
else {
// Create new entry
}
})