Các cách bật debug Database trong AdonisJs
AdonisJs Web Framework
7
White

Lương Trưởng viết ngày 01/01/2019

:smile: Bài viết này được thực hiện trên AdonisJs v4.1 :smile:

# Cấu hình

  • #1. start/events.js
  • #2. start/hooks.js
  • #3. app/Controllers/Http/MyController.js
  • #4. Cách bật debug
  • #5. Bonus

# Trong start/events.js

Tạo file events.js trong thư mục start

    const Database = use('Database')

    Database.on('query', async (query) => {
        // Xem tất cả các thông sô
        console.log(query)
        // Chỉ xem câu lệnh truy vấn
        console.log(query.sql)
    })

    // Kết quả chạy log
    {
        __knexUid: '__knexUid1',
        __knexTxId: undefined,
        method: 'first',
        options: {},
        timeout: false,
        cancelOnTimeout: false,
        bindings: [ 1, 1 ],
        __knexQueryUid: 'dc149e54-d389-4bfb-bea6-0eb1000a02fa',
        sql: 'select * from `users` where `id` = ? limit ?'
    }
    select * from `users` where `id` = ? limit ?

# Trong start/hooks.js

Tạo file hooks.js trong thư mục start

    const { hooks } = require('@adonisjs/ignitor')

    hooks.after.providersBooted(() => {
        /** @type {import('@adonisjs/lucid/src/Database')} */
        const Database = use('Database')
        Database.on('query', async (query) => {
            console.log(query)
            console.log(query.sql)
        })
    })

    // Kết quả chạy log #2 cũng tương tự như cách #1 ở trên
    {
        __knexUid: '__knexUid1',
        __knexTxId: undefined,
        method: 'first',
        options: {},
        timeout: false,
        cancelOnTimeout: false,
        bindings: [ 1, 1 ],
        __knexQueryUid: 'dc149e54-d389-4bfb-bea6-0eb1000a02fa',
        sql: 'select * from `users` where `id` = ? limit ?'
    }
    select * from `users` where `id` = ? limit ?

# Trong Controller

Tạo file MyController.js | app/Controllers/Http/MyController.js

$ adonis make:controller My --type=http
$ √ create  app\Controllers\Http\MyController.js
    'use strict'

    /** @type {typeof import('@adonisjs/lucid/src/Lucid/Model')} */
    const User = use('App/Models/User')
    const Database = use('Database')

    class MyController {

        async index() {
            const username = 'Administrator'

            const user = await User.query()
                .where('username', username)
                .where('is_active', true)
                .toSQL()
                //.fetch()

            console.log(user)
            // Kết quả log -> user:
            { 
                method: 'select',
                options: {},
                timeout: false,
                cancelOnTimeout: false,
                bindings: [ 'Administrator', true ],
                __knexQueryUid: '9a616fd7-55e6-4fff-97b3-11d6b38008cb',
                sql: 'select * from `users` where `username` = ? and `is_active` = ?' 
            }

            const user2 = await User.query()
                .where('username', username)
                .where('is_active', true)
                .toSQL()
                .toNative()
                //.fetch()

            console.log(user2)

            // Kết quả log -> user2:
            { 
                sql: 'select * from `users` where `username` = ? and `is_active` = ?',
                bindings: [ 'Administrator', true ] 
            }

            const users = await Database
                .select('*')
                .from('users')
                .toSQL()
                .toNative()

            console.log(users)

            // Kết quả log -> users:
            { sql: 'select * from `users`', bindings: [] }
        }
    }

    module.exports = MyController

Hay

await Database
  .table('users')
  .select('*')
  .on('query', console.log)             //Cách 1
  .on('query-error', console.log)       //Cách 2
  .on('query-response', console.log)    //Cách 3
  .on('sql', console.log)               //Cách 4
  .debug()                              //Cách 5
  .toString()                           //Cách 6
  .toSQL()                              //Cách 7
  .toSQL().toNative()                   //Cách 8

:smile: Lưu ý: :smile:

@class Model: với các Static methods như .first(), .all(), ... sẽ không thể xem được.

tham khảo 1

tham khảo 2

tham khảo 3

# Bật debug cho database

    ...
    // Thêm dòng này vào file .env
    DB_DEBUG=true

    ....
    // Tìm đến file config/database.js
    mysql: {
    client: 'mysql',
        connection: {
            host: Env.get('DB_HOST', 'localhost'),
            port: Env.get('DB_PORT', ''),
            user: Env.get('DB_USER', 'root'),
            password: Env.get('DB_PASSWORD', ''),
            database: Env.get('DB_DATABASE', 'adonis'),
            // Thêm dòng này nữa nè anh/em
            debug: Env.get('DB_DEBUG', false)
        }
    }
    // Kết quả log khủng lắm anh/em ơi. Mình xem đau hết cả đầu.

# Bonus

QueryBuilder trong Adonis Database/Lucid Model là một instance của knexjs, nên nếu bạn muốn hiểu sâu về QueryBuilder thì vào đây https://knexjs.org/

Hy vọng bài viết này có thể giúp đỡ các bạn trong quá trình lập trình AdonisJs/Node.js :smile::smile::smile::smile::smile: Cảm ơn anh em nhiều.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Lương Trưởng

10 bài viết.
1 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
3 1
Giới thiệu (Ảnh) Ngày 16/08/2015, Adonisjs Web Framework/Node.js được Harminder Virk (nickname: @amanvirk) công khai mã nguồn trên Github, còn phi...
Lương Trưởng viết 2 năm trước
3 1
White
3 1
Nội dung Javascript ES6 (Language changes) Directory structure Routing Request Views Models Javascript ES6 Node.js v8.0 bổ sung lên...
Lương Trưởng viết 2 năm trước
3 1
White
2 0
AdonisJs là một Node.js framework được lấy cảm hứng từ Laravel Php Framework, xem so sánh ở (Link). (Ảnh) \ Nội dung Yêu cầu cài đặt AdonisJs ...
Lương Trưởng viết 2 năm trước
2 0
Bài viết liên quan
White
2 0
AdonisJs là một Node.js framework được lấy cảm hứng từ Laravel Php Framework, xem so sánh ở (Link). (Ảnh) \ Nội dung Yêu cầu cài đặt AdonisJs ...
Lương Trưởng viết 2 năm trước
2 0
White
3 1
Giới thiệu (Ảnh) Ngày 16/08/2015, Adonisjs Web Framework/Node.js được Harminder Virk (nickname: @amanvirk) công khai mã nguồn trên Github, còn phi...
Lương Trưởng viết 2 năm trước
3 1
White
1 0
x] Bài viết này được thực hiện trên AdonisJs v4.1 | Ngày 06/01/2019 \ Các bước thực hiện 1. Factory 2. Seed \ Factory Đôi khi chúng ta cần d...
Lương Trưởng viết hơn 1 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
10 bài viết.
1 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!