Hướng dẫn thêm sửa xóa nodejs
Show Trong bài này, mình sẽ trình bày cách sử dụng Node.js kết hợp với SQLite 3 để thêm sửa xóa các bản ghi Database dạng CSDL quan hệ (có Table, Row, Column đàng hoàng). Trước giờ NodeJS thường được dùng với No-SQL ví dụ MongoDB, JSON. Bài này sẽ sử dụng SQLite 3. Nói thêm một chút, SQLite là một cơ sở dữ liệu quan hệ nhưng không cần server mà nó lưu trữ thành dạng file bê đi đâu cũng được ví dụ như một file word, exel vậy, rất là tiện lợi nếu cần đem phần mềm và cơ sở dữ liệu copy vào đâu cũng chạy. Cài đặt môi trườngMình sẽ bắt đầu bằng cách gõ lệnh
Tiếp theo, mình sẽ cần cài đặt gói
Ngoài sqlite3 mình sẽ cài đặt
Bây giờ mình sẽ tạo một file trống ngay bên cạnh tệp Thiết kế CSDLĐể lưu trữ dữ liệu cho bài toán mình sẽ thiết kế một mẫu dữ liệu quan hệ gồm 2 bảng nối nhau, kiểu master-detail. Giả sử mình cần tạo một ứng dụng dùng để quản lý dự án. Mỗi dự án có thể có một hoặc nhiều task cần hoàn thành, cần biết rõ task hoàn thành hay chưa. Mình có thể demo dữ liệu trong bảng như sau: Bảng projects
Bảng tasks
Ok, bây giờ mình biết dữ liệu gồm những gì, giờ hãy đi tạo bảng SQL để chứa được dữ liệu của 2 bảng trên Tạo ra file Cơ sở dữ liệuĐể bắt đầu, mình sẽ cần tạo một file Bên trong
Việc kết nối đến cơ sở dữ liệu đã được mô tả bằng các comment bên trên. Cơ bản thì bạn khởi tạo một class AppDAO và đưa đường dẫn đến tệp cơ sở dữ liệu SQLite mà bạn muốn kết nối, bạn sẽ được một biến this.db để bắt đầu thao tác với CSDL. Biến this.db này đã kế thừa đầy đủ các hàm viết sẵn của Node.js sqlite3 giúp thực thi các truy vấn (query) đến file dbFilePath. Trong ví dụ này chúng ta sẽ dùng đến 3 hàm sau đây:
Để bắt đầu, hãy khám phá hàm
Tham số đầu tiên được truyền cho run (...) là một chuỗi SQL được thực thi và là tham số bắt buộc. Tham số thứ hai là một mảng tham số tùy chọn mà thư viện sqlite3 sẽ hoán đổi cho bất kỳ ký tự Để áp dụng vào class AppDAO của chúng ta mình sẻ dùng đến Promise của Javascript để
đặt một lệnh
Như vậy là từ bây giờ chúng ta có thể gọi hàm AppDAO.runquery(...) và truyền vào 2 tham số cho nó để nó chạy kết nối đến db và lấy ra dữ liệu cần thiết cho mình, tùy thuộc vào câu sql truyền vào. Chúng ta có 2 bảng là Giờ, mình thêm hai file nữa
vào dự án của mình là
Tương tự như vậy chúng ta tạo file
Như vậy là query SQL để tạo bảng đã hoàn tất, tiếp đến mình sẽ chuyển sang các hàm chèn dữ liệu vào các bảng. Chèn dữ liệuTrong class
Một hàm khởi tạo
tương tự cho class
Bây giờ chúng ta đã có thể INSERT dữ liệu vào cơ sở dữ liệu. Giờ hãy chuyển qua chức năng để cập nhật CSDL. Cập nhật dữ liệuTrong class ProjectRepository, mình sẽ thêm một hàm update tất cả các trường cho bản ghi cơ sở dữ liệu của project. Đầu vào cần phải biết là project nào cần được update. Sử dụng hàm AppDAO.runquery(...), như sau:
Tiếp theo là thêm hàm cập nhật tương ứng vào class TaskRepository.
Xóa dữ liệuChức năng cuối cùng cần thực hiện là xóa các bản ghi trong cơ sở dữ liệu. Đối với chức năng này mình sẽ một lần nữa sử dụng Đối với
Và cho
Đã xong, chúng ta đã viết xong toàn bộ các hàm THÊM, SỬA, XÓA cho cở sở dữ liệu của 2 bảng Đọc dữ liệuĐể đọc dữ liệu ra từ CSDL sau khi đã được thêm vào, hàm get được sử dụng để truy xuất một dòng dữ liệu, còn hàm all được sử dụng để truy vấn nhiều dòng dữ liệu đồng thời. Cú pháp để get như sau:
Ở đây db là một đối tượng kết nối đến file sqlite3. Bạn sẽ thấy rằng cú pháp về cơ bản giống với hàm run, nhưng ở hàm callback sau khi thực thi xong query SELECT sẽ có thêm một tham số result. Tham số này là bắt buộc vì nó sẽ chứa object (dòng dữ liệu trong bảng) đã được lấy ra và vứt vào đây. Cú pháp của hàm
Cũng giống như mình đã làm với hàm
Bây giờ mình có thể sử dụng các hàm này trong các lớp Để bắt đầu, mình sẽ thêm hàm Trong
Để chứng minh AppDAO.all(...), mình sẽ thêm khả năng chọn tất cả các dự án cũng như tất cả các nhiệm vụ cho một dự án cụ thể. Mã để SELECT tất cả các dự án trông như thế này:
Sau đó, để chọn tất cả các nhiệm vụ cho một dự án, mình sẽ sử dụng một hàm được gọi là getTasks(projectId)dự kiến id của dự án bạn muốn các nhiệm vụ.
Đặt Mã truy cập dữ liệu để sử dụng Cho đến nay mình đã cơ bản tạo ra một thư viện truy cập dữ liệu cho dự án hư cấu này và ứng dụng theo dõi nhiệm vụ. Những gì mình muốn làm bây giờ là sử dụng nó để tải lên dữ liệu thử nghiệm của mình được hiển thị trong các bảng trong phần Thiết kế cơ sở dữ liệu . Trong tập tin main.js mình sẽ muốn kéo trong AppDAO,
Biên dịch và chạy hàm main bằng lệnh Node như sau:
Và bạn sẽ thấy kết quả như hình dưới đây. Tất cả các hàm đều đã chạy ngon.
Kết luậnTrong hướng dẫn này, mình đã xem lại các khái niệm cơ bản về các hàm Như mọi khi, mình cảm ơn bạn đã đọc! Bài này là một bài dịch, link bài gốc ở đây: http://stackabuse.com/a-sqlite-tutorial-with-node-js/ |