×

Cài đặt thư viện Bookshelf.js trong JavaScript

Giới thiệu về Bookshelf.js

Trong quá trình phát triển ứng dụng web, việc làm việc với cơ sở dữ liệu là một phần không thể thiếu và đặc biệt quan trọng. Bookshelf.js là một ORM (Object-Relational Mapping) được xây dựng trên Knex.js, giúp bạn làm việc với cơ sở dữ liệu SQL dễ dàng hơn. Bookshelf.js hỗ trợ PostgreSQL, MySQL, và SQLite, cho phép bạn định nghĩa và tương tác với các mô hình dữ liệu một cách trực quan và có cấu trúc.

Tại sao lại chọn Bookshelf.js?

Khi có nhiều ORM khác trên thị trường như Sequelize, TypeORM, và Objection.js, việc lựa chọn Bookshelf.js có thể đem lại những lợi ích sau:

  1. Dễ dàng tích hợp với Knex.js: Bookshelf.js được xây dựng trên Knex.js, một query builder mạnh mẽ và phổ biến, giúp tận dụng tối đa các tính năng của Knex.js.
  2. Hỗ trợ tốt các mối quan hệ: Bookshelf.js cung cấp hỗ trợ đa dạng cho các mối quan hệ như one-to-one, one-to-many, và many-to-many.
  3. Khả năng mở rộng và tùy chỉnh: Bạn có thể dễ dàng mở rộng và tùy chỉnh các mô hình dữ liệu của mình để phù hợp với yêu cầu của dự án.
  4. Cộng đồng và tài liệu phong phú: Bookshelf.js có cộng đồng lớn và tài liệu đầy đủ, giúp bạn dễ dàng tìm kiếm sự hỗ trợ khi cần thiết.

Cài đặt Bookshelf.js

Khởi tạo dự án

Để bắt đầu, bạn cần khởi tạo một dự án Node.js mới. Mở terminal và chạy các lệnh sau:

mkdir my-bookshelf-app
cd my-bookshelf-app
npm init -y

Dòng lệnh npm init -y sẽ tạo ra một tệp package.json với các thiết lập mặc định.

Cài đặt Knex.js và Bookshelf.js

Tiếp theo, bạn cần cài đặt Knex.js và Bookshelf.js. Đồng thời, bạn cũng cần cài đặt driver cho cơ sở dữ liệu mà bạn sẽ sử dụng. Trong bài viết này, chúng ta sẽ sử dụng SQLite3 để đơn giản hóa quá trình cài đặt và thử nghiệm:

npm install knex bookshelf sqlite3

Cấu hình Knex.js

Bạn cần cấu hình Knex.js để kết nối với cơ sở dữ liệu. Tạo một tệp knexfile.js ở thư mục gốc của dự án với nội dung sau:

const path = require('path');

module.exports = {
  client: 'sqlite3',
  connection: {
    filename: path.join(__dirname, 'dev.sqlite3')
  },
  useNullAsDefault: true
};

Trong tệp này, chúng ta chỉ định sử dụng SQLite3 và lưu trữ cơ sở dữ liệu trong tệp dev.sqlite3 tại thư mục gốc của dự án.

Khởi tạo Knex

Tạo một tệp db.js để khởi tạo Knex với cấu hình đã thiết lập:

const knex = require('knex');
const config = require('./knexfile');
const db = knex(config);

module.exports = db;

Khởi tạo Bookshelf

Tạo một tệp bookshelf.js để khởi tạo Bookshelf dựa trên instance của Knex:

const db = require('./db');
const bookshelf = require('bookshelf')(db);

module.exports = bookshelf;

Định nghĩa mô hình

Bây giờ chúng ta đã sẵn sàng để định nghĩa các mô hình dữ liệu của mình bằng Bookshelf.js. Giả sử chúng ta có một bảng users, chúng ta có thể tạo một tệp models/User.js như sau:

const bookshelf = require('../bookshelf');

const User = bookshelf.model('User', {
  tableName: 'users'
});

module.exports = User;

Tạo bảng trong cơ sở dữ liệu

Tiếp theo, chúng ta cần tạo bảng users. Sử dụng Knex.js để tạo bảng này. Tạo một tệp migrations/20221012_create_users_table.js với nội dung:

exports.up = function(knex) {
  return knex.schema.createTable('users', function(table) {
    table.increments('id').primary();
    table.string('name');
    table.string('email').unique();
    table.timestamps();
  });
};

exports.down = function(knex) {
  return knex.schema.dropTable('users');
};

Chạy migration để tạo bảng:

npx knex migrate:latest

Thêm dữ liệu mẫu

Tạo một người dùng mới trong ứng dụng của bạn. Để làm điều này, tạo một tệp createUser.js với nội dung sau:

const User = require('./models/User');

new User({
  name: 'John Doe',
  email: 'john.doe@example.com'
})
.save()
.then(user => {
  console.log('User saved:', user.toJSON());
})
.catch(err => {
  console.error('Error saving user:', err);
});

Chạy tệp này bằng cách sử dụng lệnh Node.js:

node createUser.js

Nếu mọi thứ hoạt động đúng, bạn sẽ thấy thông báo "User saved" trong console và thông tin của người dùng được lưu vào cơ sở dữ liệu.

Sử dụng Bookshelf.js trong ứng dụng

Lấy dữ liệu

Để lấy dữ liệu từ cơ sở dữ liệu, bạn có thể sử dụng phương thức .fetch() của mô hình. Tạo một tệp getUser.js với nội dung:

const User = require('./models/User');

User.where('id', 1).fetch()
.then(user => {
  console.log('User fetched:', user.toJSON());
})
.catch(err => {
  console.error('Error fetching user:', err);
});

Chạy tệp này để thấy dữ liệu của người dùng mà bạn đã tạo trước đó:

node getUser.js

Cập nhật dữ liệu

Để cập nhật dữ liệu của một người dùng, bạn có thể sử dụng phương thức .save() tương tự như khi tạo mới. Tạo một tệp updateUser.js với nội dung:

const User = require('./models/User');

User.where('id', 1).fetch()
.then(user => {
  return user.save({ name: 'Jane Doe' });
})
.then(user => {
  console.log('User updated:', user.toJSON());
})
.catch(err => {
  console.error('Error updating user:', err);
});

Chạy tệp này để cập nhật tên của người dùng:

node updateUser.js

Xóa dữ liệu

Để xóa một người dùng, sử dụng phương thức .destroy(). Tạo một tệp deleteUser.js với nội dung:

const User = require('./models/User');

User.where('id', 1).fetch()
.then(user => {
  return user.destroy();
})
.then(() => {
  console.log('User deleted');
})
.catch(err => {
  console.error('Error deleting user:', err);
});

Chạy tệp này để xóa người dùng:

node deleteUser.js

Kết luận

Bookshelf.js là một ORM mạnh mẽ và dễ sử dụng cho việc làm việc với cơ sở dữ liệu SQL trong các ứng dụng Node.js. Với sự hỗ trợ toàn diện cho các mối quan hệ, khả năng mở rộng, và tích hợp dễ dàng với Knex.js, Bookshelf.js là một lựa chọn tuyệt vời cho các dự án của bạn. Bài viết này đã hướng dẫn bạn từ cách cài đặt đến cách sử dụng cơ bản Bookshelf.js, hy vọng sẽ giúp bạn làm quen với công cụ này và áp dụng vào dự án của mình một cách hiệu quả.

Comments