20 votes

Comment utiliser findOrCreate dans Sequelize ?

Je suis une débutante de Sequelize. J'aimerais faire une authentification oAuth avec Twitter ou Facebook et je veux sauvegarder les informations de l'utilisateur dans la base de données. Mais si l'authentification oAuth est faite sur plusieurs sites, il y a un problème que les informations telles que l'identifiant de l'utilisateur enregistré dans la base de données seront dupliquées avec d'autres sites. Afin d'éviter cela, je voudrais faire un processus pour mettre à jour la base de données seulement lorsque l'utilisateur spécifié n'existe pas déjà dans la base de données. Je savais que nous pouvions utiliser findOrCreate de sequelize pour effectuer ce traitement, mais je ne sais pas comment utiliser findOrCreate. Je sais comment utiliser upsert et j'aimerais faire findOrCreate comme la description de upsert ci-dessous. Cependant, nous voulons effectuer un branchement conditionnel comme if (userid ! = "○○○" && username ! = "○○○").

        User.upsert
        ({
            userid: profile.id,
            username: profile.username,
            accountid: c+1
        }).then
        (() => {
            done(null, profile);
        });

Que dois-je faire ?

28voto

Adhyatmik Points 451
// remember to use a transaction as you are not sure whether the user is
// already present in DB or not (and you might end up creating the user -
// a write operation on DB)

models.sequelize.transaction(function(t) {
  return models.users.findOrCreate({
    where: {
      userId:    profile.userId,
      name:      profile.name
    },
    transaction: t
  })
  .spread(function(userResult, created){
    // userResult is the user instance

    if (created) {
      // created will be true if a new user was created
    }
  });
});

3voto

user711672 Points 153

Une autre option consiste à utiliser les crochets Sequelize. Vous voudrez faire en sorte que le callback de votre hook soit asynchrone (Sequelize le supporte), de sorte que dans le hook vous puissiez exécuter votre contrôle et retourner une promesse uniquement si votre contrôle est réussi (et lancer une erreur sinon).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X