Je dois vérifier si une entrée avec un ID spécifique existe dans la base de données à l'aide de Sequelize dans Node.js
function isIdUnique (id) {
db.Profile.count({ where: { id: id } })
.then(count => {
if (count != 0) {
return false;
}
return true;
});
}
J'appelle cette fonction dans une instruction if mais le résultat est toujours indéfini
if(isIdUnique(id)){...}
Vous ne retournez pas à partir de la fonction isIdUnique
:
function isIdUnique (id) {
return db.Profile.count({ where: { id: id } })
.then(count => {
if (count != 0) {
return false;
}
return true;
});
}
isIdUnique(id).then(isUnique => {
if (isUnique) {
// ...
}
});
Je ne préfère pas utiliser count pour vérifier l'existence d'un enregistrement. Supposons que vous ayez des similitudes pour des centaines de millions d'enregistrements, pourquoi les compter tous si vous voulez simplement obtenir une valeur booléenne, true s'il existe false sinon?
findOne fera le travail à la première valeur quand il y a correspondance.
const isIdUnique = id =>
db.Profile.findOne({ where: { id} })
.then(token => token !== null)
.then(isUnique => isUnique);
Comme Sequelize est conçu autour de promesses de toute façon, la réponse d’alecxe a probablement du sens, mais pour offrir une alternative, vous pouvez également transmettre un rappel:
function isIdUnique (id, done) {
db.Profile.count({ where: { id: id } })
.then(count => {
done(count == 0);
});
}
}
isIdUnique(id, function(isUnique) {
if (isUnique) {
// stuff
}
});
Vous pouvez compter et trouver.
Project
.findAndCountAll({
where: {
title: {
[Op.like]: 'foo%'
}
},
offset: 10,
limit: 2
})
.then(result => {
console.log(result.count);
console.log(result.rows);
});
Doc link, version bêta de la v5