Bookshelf adalah orm javascript untuk node.js, dibangun di atas pembangun kueri SQL KNEX. Ini fitur antarmuka callback berbasis janji dan tradisional, dukungan transaksi, pemuatan hubungan yang bersemangat/bersarang, asosiasi polimorfik, dan dukungan untuk hubungan satu-ke-satu, satu-ke-banyak, dan banyak-ke-banyak.
Ini dirancang untuk bekerja dengan PostgreSQL, MySQL, dan SQLite3.
Situs web dan dokumentasi. Proyek ini di -host di GitHub, dan memiliki suite tes yang komprehensif.
Rak buku bertujuan untuk menyediakan perpustakaan sederhana untuk tugas -tugas umum saat menanyakan database dalam JavaScript, dan membentuk hubungan antara objek -objek ini, mengambil banyak ide dari pola data mapper.
Dengan basis kode yang ringkas dan melek, rak buku mudah dibaca, dipahami, dan diperluas. Itu tidak memaksa Anda untuk menggunakan skema validasi spesifik apa pun, dan memberikan hubungan yang fleksibel, efisien/pemuatan hubungan bersarang dan dukungan transaksi kelas satu.
Ini adalah mapper objek ramping-relasional, memungkinkan Anda untuk jatuh ke antarmuka Knex mentah setiap kali Anda membutuhkan kueri khusus yang tidak cukup sesuai dengan konvensi stok.
Anda harus menginstal salinan Knex, dan mysql
, pg
, atau sqlite3
dari NPM.
$ npm install knex
$ npm install bookshelf
# Then add one of the following :
$ npm install pg
$ npm install mysql
$ npm install sqlite3
Perpustakaan rak buku diinisialisasi dengan melewati instance klien Knex yang diinisialisasi. Dokumentasi Knex memberikan sejumlah contoh untuk database yang berbeda.
// Setting up the database connection
const knex = require ( 'knex' ) ( {
client : 'mysql' ,
connection : {
host : '127.0.0.1' ,
user : 'your_database_user' ,
password : 'your_database_password' ,
database : 'myapp_test' ,
charset : 'utf8'
}
} )
const bookshelf = require ( 'bookshelf' ) ( knex )
// Defining models
const User = bookshelf . model ( 'User' , {
tableName : 'users'
} )
Inisialisasi ini kemungkinan besar hanya terjadi sekali dalam aplikasi Anda. Karena menciptakan kumpulan koneksi untuk database saat ini, Anda harus menggunakan instance bookshelf
yang dikembalikan ke seluruh perpustakaan Anda. Anda harus menyimpan instance ini yang dibuat oleh inisialisasi di suatu tempat dalam aplikasi sehingga Anda dapat merujuknya. Pola umum untuk diikuti adalah menginisialisasi klien dalam modul sehingga Anda dapat dengan mudah merujuknya nanti:
// In a file named, e.g. bookshelf.js
const knex = require ( 'knex' ) ( dbConfig )
module . exports = require ( 'bookshelf' ) ( knex )
// elsewhere, to use the bookshelf client:
const bookshelf = require ( './bookshelf' )
const Post = bookshelf . model ( 'Post' , {
// ...
} )
Berikut adalah contoh untuk membantu Anda memulai:
const knex = require ( 'knex' ) ( {
client : 'mysql' ,
connection : process . env . MYSQL_DATABASE_CONNECTION
} )
const bookshelf = require ( 'bookshelf' ) ( knex )
const User = bookshelf . model ( 'User' , {
tableName : 'users' ,
posts ( ) {
return this . hasMany ( Posts )
}
} )
const Post = bookshelf . model ( 'Post' , {
tableName : 'posts' ,
tags ( ) {
return this . belongsToMany ( Tag )
}
} )
const Tag = bookshelf . model ( 'Tag' , {
tableName : 'tags'
} )
new User ( { id : 1 } ) . fetch ( { withRelated : [ 'posts.tags' ] } ) . then ( ( user ) => {
console . log ( user . related ( 'posts' ) . toJSON ( ) )
} ) . catch ( ( error ) => {
console . error ( error )
} )
.set()
pada model. Model
, menambahkan cap waktu, validasi atribut dan beberapa metode CRUD asli.Punya pertanyaan tentang perpustakaan? Bergabunglah dengan kami di saluran #BookShelf Freenode IRC untuk dukungan di Knex.js dan Bookshelf.js, atau posting masalah di Stack Overflow.
Jika Anda ingin berkontribusi pada rak buku, Anda biasanya ingin melaporkan masalah atau mengirimkan permintaan tarik. Untuk tujuan ini repositori online tersedia di GitHub.
Untuk bantuan lebih lanjut menyiapkan lingkungan pengembangan lokal Anda atau mempelajari bagaimana Anda dapat berkontribusi pada rak buku, Anda harus membaca dokumen berkontribusi yang tersedia di GitHub.
Ya, Anda dapat menelepon .asCallback(function(err, resp) {
pada metode operasi basis data apa pun dan menggunakan antarmuka callback gaya standar (err, result)
jika Anda mau.
Pastikan untuk memeriksa bahwa jenisnya benar untuk parameter awal yang diteruskan ke model awal yang diambil. Misalnya new Model({id: '1'}).load([relations...])
tidak akan mengembalikan yang sama dengan new Model({id: 1}).load([relations...])
- PEMBERITAHUAN bahwa ID adalah string dalam satu kasus dan angka di yang lain. Ini bisa menjadi kesalahan umum jika mengambil ID dari parameter URL.
Ini hanya masalah jika Anda ingin memuat data dengan beban tanpa terlebih dahulu mengambil model asli. new Model({id: '1'}).fetch({withRelated: [relations...]})
harus bekerja dengan baik.
Masalahnya di sini adalah bahwa Knex, lapisan abstraksi basis data yang digunakan oleh rak buku, menggunakan pengumpulan koneksi dan dengan demikian menjaga koneksi basis data tetap terbuka. Jika Anda ingin proses Anda keluar setelah skrip Anda selesai, Anda harus menelepon .destroy(cb)
di properti knex
dari instance Bookshelf
Anda atau pada instance Knex
yang dilewati selama inisialisasi. Informasi lebih lanjut tentang pengumpulan koneksi dapat ditemukan di Dokumen Knex.
Jika Anda lulus debug: true
di objek opsi untuk panggilan inisialisasi knex
Anda, Anda dapat melihat semua panggilan kueri sedang dilakukan. Anda juga dapat memberikan opsi yang sama untuk semua metode yang mengakses database, seperti model.fetch()
atau model.destroy()
. Contoh:
// Turning on debug mode for all queries
const knex = require ( 'knex' ) ( {
debug : true ,
client : 'mysql' ,
connection : process . env . MYSQL_DATABASE_CONNECTION
} )
const bookshelf = require ( 'bookshelf' ) ( knex )
// Debugging a single query
new User ( { id : 1 } ) . fetch ( { debug : true , withRelated : [ 'posts.tags' ] } ) . then ( user => {
// ...
} )
Terkadang Anda perlu menyelam sedikit lebih jauh ke berbagai panggilan dan melihat apa yang terjadi di belakang layar. Anda dapat menggunakan Node-Inspector, yang memungkinkan Anda untuk men-debug kode dengan pernyataan debugger
seperti yang Anda lakukan di browser.
Rak buku menggunakan salinannya sendiri dari bluebird
Promise Library. Anda dapat membaca di sini untuk mendapatkan informasi lebih lanjut tentang janji debugging.
Menambahkan blok berikut di awal kode aplikasi Anda akan menangkap kesalahan apa pun yang tidak ditangkap dalam penangan rantai janji normal, yang sangat membantu dalam debugging:
process . stderr . on ( 'data' , ( data ) => {
console . log ( data )
} )
Lihat dokumen yang berkontribusi di GitHub.
Meskipun terutama menargetkan node.js, semua dependensi kompatibel dengan browser, dan dapat disesuaikan untuk bekerja dengan lingkungan JavaScript lainnya yang mendukung database SQLITE3, dengan menyediakan adaptor Knex khusus. Tidak ada adaptor seperti itu.
Kami menemukan proyek -proyek berikut menggunakan rak buku, tetapi mungkin ada lebih banyak: