Sequelize sorgusu yürütülürken konsola SQL çıkışı engellemek?


189

Bir kullanıcının profilini almak için bir işlevi var.

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);
  });
});

"Bul" işlevi çağrıldığında, sunucunun başlatıldığı konsolda select deyimini görüntüler.

Executing (default): SELECT `id`, `firstName`, `lastName`, `emailAddress`, `password`, `passwordRecoveryToken`, `passwordRecoveryTokenExpire`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`emailAddress` = 'johndoe@doe.com' LIMIT 1;

Bunu göstermemenin bir yolu var mı? Bir yapılandırma dosyasında bir yere koyduğum bazı bayraklar?


Bir sorum var, varsayalım parola alanı findOrCreate () yönteminde döndürmek istemiyorum. Bunu nasıl yapabilirim ?
Sunil Sharma

@SunilSharma özelliği hariç tutar, excludebu sayfada arama sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Yanıtlar:


360

Sequelize nesnenizi oluştururken falseşu loggingparametreye geçin :

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

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

});

Daha fazla seçenek için dokümanları kontrol edin .


23
yeni bir soruya başlamak, zorlukla ilgili bir soruya yeni bir soru atlatmaya çalışmaktan daha iyidir.
thenetimp

Teşekkür ederim, bu çalışıyor ancak yürütülen her sorgu için beyaz bir alan verir. Lütfen bana yardım edebilir misin ..
Tijo Tom

1
Şimdilik, loggingseçenek bir işlev olmalıdır .
Lee Han Kyeol

1
Sequelize v4 kullanılırken bunun bir etkisi yok gibi görünüyor. Herkes bir çözüm buldu mu?
Garbit

37

'Config / config.json' dosyası kullanılırsa, geliştirme yapılandırması bölümü altında config.json dosyasına 'logging': false değerini ekleyin.

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

27

Diğer yanıtlarda olduğu gibi, sadece ayarlayabilirsiniz logging:false, ancak günlük kaydını tamamen devre dışı bırakmaktan daha iyi olduğunu düşünüyorum, uygulamanızdaki günlük düzeylerini kucaklayabilirsiniz. Bazen, çalıştırılan sorgulara bir göz atmak isteyebilirsiniz, bu nedenle Sequelize'i düzey ayrıntılı veya hata ayıklamada oturum açacak şekilde yapılandırmak daha iyi olabilir. Örneğin (winston'u burada bir günlükleme çerçevesi olarak kullanıyorum, ancak başka bir çerçeve kullanabilirsiniz):

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

Bu, SQL deyimlerini yalnızca winston günlük düzeyi hata ayıklama veya daha düşük hata ayıklama düzeylerine ayarlanmışsa verir. Günlük düzeyi uyarılırsa veya bilgi örneğin SQL günlüğe kaydedilmez


6

Bu yanıtların tümü oluşturma sırasında günlük kaydı kapatılır .

Peki ya çalışma zamanında günlüğe kaydetmeyi kapatmamız gerekirse ?

Çalışma zamanı ile, işlevi sequelizekullanarak nesneyi başlattıktan sonra demek new Sequelize(...

Github kaynağına baktım , çalışma zamanında günlüğü kapatmanın bir yolunu buldum.

// Somewhere your code, turn off the logging
sequelize.options.logging = false

// Somewhere your code, turn on the logging
sequelize.options.logging = true 

2

Bu tartışmaya dayanarak, config.jsonmükemmel çalışan bunu inşa ettim :

{
  "development": {
    "username": "root",
    "password": null,
    "logging" : false,
    "database": "posts_db_dev",
    "host": "127.0.0.1",
    "dialect": "mysql",
    "operatorsAliases": false 
  }
}

2

İşte cevabım:

Özet : typeormORM kütüphanesi olarak kullanıyordum . Bu nedenle, sorgu günlüğü düzeyini ayarlamak için doğrudan günlüğe kaydetme seçeneğini olarak ayarlamak yerine aşağıdaki seçeneği kullandım false.

Çözüm: Dosya adı - ormconfig.ts

{
    'type': process.env.DB_DRIVER,
    'host': process.env.DB_HOST,
    'port': process.env.DB_PORT,
    'username': process.env.DB_USER,
    'password': process.env.DB_PASS,
    'database': process.env.DB_NAME,
    'migrations': [process.env.MIGRATIONS_ENTITIES],
    'synchronize': false,
    'logging': process.env.DB_QUERY_LEVEL,
    'entities': [
        process.env.ORM_ENTITIES
    ],
    'cli': {
        'migrationsDir': 'migrations'
     }
}

Ve envrionment değişkeninde DB_QUERY_LEVEL["query", "error"] olarak ayarlayın.

Sonuç: Sonuç olarak yalnızca sorguda başka bir hata olduğunda günlüğe kaydedilir.

Ref link: typeorm db sorgu günlüğü doc

Bu yardımcı olur umarım! Teşekkürler.


0

Ben Sequelize ORM 6.0.0 kullanıyorum ve "logging" kullanıyorum: geri kalanı olarak false ama ORM son sürümü için cevabımı gönderdi.

const sequelize = new Sequelize(
        process.env.databaseName,
        process.env.databaseUser,
        process.env.password,
        {
            host: process.env.databaseHost,
            dialect: process.env.dialect,
            "logging": false,
            define: {
                // Table names won't be pluralized.
                freezeTableName: true,
                // All tables won't have "createdAt" and "updatedAt" Auto fields.
                timestamps: false
            }
        }
    );

Not: Sırlarımı .env12 faktörlü metodolojiyi gözlemleyen bir yapılandırma dosyasında saklıyorum .


0

Aşağıdaki kodu kullanarak birçok sorunu çözdüm. Sorunlar: -

  1. Veritabanına bağlanma
  2. Veritabanı bağlantısı Reddi sorunları
  3. Konsoldaki günlüklerden kurtulma (buna özel).
const sequelize = new Sequelize("test", "root", "root", {
  host: "127.0.0.1",
  dialect: "mysql",
  port: "8889",
  connectionLimit: 10,
  socketPath: "/Applications/MAMP/tmp/mysql/mysql.sock",
  // It will disable logging
  logging: false
});

insanlar hala MAMP kullanıyor?
thenetimp

Evet, geliştirme için, başka bir en iyi ücretsiz seçeneğiniz varsa, lütfen bana bildirin, teşekkürler
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.