web-dev-qa-db-fra.com

Empêcher Sequelize de générer du code SQL vers la console lors de l'exécution d'une requête?

J'ai une fonction pour récupérer le profil d'un utilisateur.

app.get('/api/user/profile', function (request, response)
{
  // Create the default error container
  var error = new Error();

  var User = db.User;
  User.find({
    where: { emailAddress: request.user.username}
  }).then(function(user)
  {
    if(!user)
    {
      error.status = 500; error.message = "ERROR_INVALID_USER"; error.code = 301;
      return next(error);
    }

    // Build the profile from the user object
    profile = {
      "firstName": user.firstName,
      "lastName": user.lastName,
      "emailAddress": user.emailAddress
    }
    response.status(200).send(profile);
  });
});

Lorsque la fonction "find" est appelée, elle affiche l'instruction select sur la console où le serveur a été démarré.

Executing (default): SELECT `id`, `firstName`, `lastName`, `emailAddress`, `password`, `passwordRecoveryToken`, `passwordRecoveryTokenExpire`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`emailAddress` = '[email protected]' LIMIT 1;

Y a-t-il un moyen de faire en sorte que cela ne soit pas affiché? Certains indicateurs que j'ai définis quelque part dans un fichier de configuration?

143
thenetimp

Lorsque vous créez votre objet Sequelize, transmettez false au paramètre logging:

var sequelize = new Sequelize('database', 'username', 'password', {

  // disable logging; default: console.log
  logging: false

});

Pour plus d'options, consultez le docs .

253
victorkohl

Si le fichier 'config/config.json' est utilisé, ajoutez alors 'logging': false à config.json dans ce cas, dans la section de configuration de développement.

  // file config/config.json
  {
      {
      "development": {
        "username": "username",
        "password": "password",
        "database": "db_name",
        "Host": "127.0.0.1",
        "dialect": "mysql",
        "logging": false
      },
      "test": {
    ...
   }
27
Supawat Pusavanno

Comme dans d'autres réponses, vous pouvez simplement définir logging:false, mais je pense que mieux que de désactiver complètement la journalisation, vous pouvez simplement adopter des niveaux de journalisation dans votre application. Parfois, vous voudrez peut-être jeter un coup d'œil sur les requêtes exécutées. Il est donc préférable de configurer Sequelize pour qu'il se connecte au niveau verbose ou debug. par exemple (j'utilise winston ici comme framework de journalisation mais vous pouvez utiliser n'importe quel autre framework):

var sequelize = new Sequelize('database', 'username', 'password', {
  logging: winston.debug
});

Cela produira des instructions SQL uniquement si le niveau de journalisation Winston est défini sur débogage ou sur des niveaux de débogage inférieurs. Si le niveau de journalisation est averti ou que les informations, par exemple, SQL ne sera pas consigné

14

Sur la base de cette discussion, j'ai construit ce config.json qui fonctionne parfaitement:

{
  "development": {
    "username": "root",
    "password": null,
    "logging" : false,
    "database": "posts_db_dev",
    "Host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false 
  }
}
2
Stephen Hulme