Ngăn chặn Sequelize từ việc xuất SQL ra bàn điều khiển khi thực hiện truy vấn?


187

Tôi có một chức năng để lấy hồ sơ của người dùng.

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

Khi chức năng "tìm" được gọi, nó sẽ hiển thị câu lệnh chọn trên bàn điều khiển nơi máy chủ được khởi động.

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

Có cách nào để làm cho điều này không được hiển thị? Một số cờ mà tôi đặt trong một tập tin cấu hình ở đâu đó?


Tôi có một câu hỏi, giả sử tôi không muốn trường mật khẩu được trả về trong phương thức findOrCreate (). Tôi có thể làm cái này như thế nào ?
Sunil Sharma

@SunilSharma loại trừ thuộc tính, tìm kiếm excludetrên trang này sequelize.readthedocs.io/en/latest/docs/querying/#attributes
Karel Frajták

Câu trả lời:


354

Khi bạn tạo đối tượng Sequelize, hãy chuyển falseđến loggingtham số:

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

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

});

Để có thêm tùy chọn, kiểm tra tài liệu .


23
bạn nên bắt đầu một câu hỏi mới hơn là cố gắng cõng một câu hỏi mới trên một câu hỏi hầu như không liên quan.
xem lại

Cảm ơn bạn, điều này đang hoạt động tuy nhiên nó mang lại một khoảng trắng cho mỗi truy vấn được thực hiện. Bạn có thể vui lòng giúp tôi không ..
Tijo Tom 7/07/2016

1
Bây giờ, loggingtùy chọn nên là một chức năng .
Lee Han Kyeol

1
Điều này dường như không có tác dụng khi sử dụng sequelize v4. Bất cứ ai tìm thấy một giải pháp aa?
Garbit

35

Nếu tệp 'config / config.json' được sử dụng thì hãy thêm 'log': false vào config.json trong trường hợp này trong phần cấu hình phát triển.

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

26

Như trong các câu trả lời khác, bạn chỉ có thể đặt logging:false, nhưng tôi nghĩ tốt hơn là vô hiệu hóa hoàn toàn việc ghi nhật ký, bạn chỉ có thể nắm lấy các mức nhật ký trong ứng dụng của mình. Đôi khi bạn có thể muốn xem các truy vấn đã thực hiện để có thể tốt hơn khi định cấu hình Sequelize để đăng nhập ở mức độ dài hoặc gỡ lỗi. ví dụ: Tôi đang sử dụng winston ở đây làm khung đăng nhập nhưng bạn có thể sử dụng bất kỳ khung nào khác):

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

Điều này sẽ chỉ xuất các câu lệnh SQL nếu mức ghi nhật ký winston được đặt thành mức gỡ lỗi hoặc mức độ gỡ lỗi thấp hơn. Nếu mức nhật ký được cảnh báo hoặc thông tin ví dụ SQL sẽ không được ghi lại


6

Tất cả các câu trả lời này đã tắt đăng nhập tại thời điểm tạo.

Nhưng nếu chúng ta cần tắt đăng nhập vào thời gian chạy thì sao?

Theo thời gian chạy tôi có nghĩa là sau khi khởi tạo sequelizeđối tượng bằng cách sử dụng new Sequelize(..chức năng.

Tôi lén nhìn vào nguồn github , tìm cách tắt đăng nhập trong thời gian chạy.

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

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

2

Dựa trên cuộc thảo luận này, tôi đã xây dựng config.jsonnó hoạt động hoàn hảo:

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

0

Tôi đang sử dụng Sequelize ORM 6.0.0 và đang sử dụng "log": false như phần còn lại nhưng đã đăng câu trả lời của tôi cho phiên bản ORM mới nhất.

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

Lưu ý: Tôi đang lưu trữ các bí mật của mình trong một tệp cấu hình .envtuân theo phương pháp 12 yếu tố.


0

Đây là câu trả lời của tôi:

Tóm tắt : Tôi đã sử dụng typeormnhư một thư viện ORM. Vì vậy, để đặt mức ghi nhật ký truy vấn, tôi đã sử dụng tùy chọn sau thay vì trực tiếp đặt tùy chọn ghi nhật ký như false.

Giải pháp: Tên tệp - 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'
     }
}

Và, trong biến enConnionment đặt DB_QUERY_LEVELlà ["truy vấn", "lỗi"].

Kết quả: Kết quả là nó sẽ chỉ đăng nhập khi truy vấn có lỗi khác.

Liên kết tham chiếu: typeorm db truy vấn tài liệu đăng nhập

Hi vọng điêu nay co ich! Cảm ơn.


0

Tôi đã giải quyết rất nhiều vấn đề bằng cách sử dụng đoạn mã sau. Các vấn đề là: -

  1. Không kết nối với cơ sở dữ liệu
  2. Vấn đề từ chối kết nối cơ sở dữ liệu
  3. Loại bỏ các bản ghi trong giao diện điều khiển (cụ thể cho việc này).
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
});

mọi người vẫn dùng MAMP?
xem lại

Có, để phát triển, nếu bạn có một tùy chọn miễn phí tốt nhất khác, vui lòng cho tôi biết, cảm ơn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.