Đọc dữ liệu của file sử dụng Node.js
Node.js cung cấp cho chúng ta hai phương pháp khác nhau để có thể đọc dữ liệu từ một file đó là đọc đồng bộ (synchronous) và đọc không đồng bộ (asynchronous). Trong bài viết này chúng ta sẽ tìm hiểu lần lượt từng phương pháp thông qua đó hiểu được sự khác biệt trong giữa chúng. Để có thể chạy ...
Node.js cung cấp cho chúng ta hai phương pháp khác nhau để có thể đọc dữ liệu từ một file đó là đọc đồng bộ (synchronous) và đọc không đồng bộ (asynchronous). Trong bài viết này chúng ta sẽ tìm hiểu lần lượt từng phương pháp thông qua đó hiểu được sự khác biệt trong giữa chúng.
Để có thể chạy được các đoạn mã ví dụ trong bài viết thì trước hết bạn cần tạo một file text.txt với nội dung sau:
Dòng 1 Dòng 2 Dòng 3
Và lưu file này trên máy ở địac chỉ thư mục C: odejs.
Đọc Đồng Bộ
Đọc dữ liệu theo phương pháp đồng bộ là phương pháp đọc mà trong đó Node.sj sẽ chỉ tiếp tục chạy chương trình sau khi kết thúc quá trình đọc. Nói cách khác luồng chạy của chương trình chỉ có thể được tiếp tục sau khi Node.js kết thúc việc đọc dữ liệu. Để hiểu cụ thể về cách đọc này thì bây giờ bạn hãy tạo một file read_syn.js với nội dung sau:
var fs = require('fs'); var content = fs.readFileSync('C: odejs ext.txt', 'utf-8'); console.log(content); console.log('Bye');
Ở đoạn mã trên chúng ta sử dụng hàm require để load (nạp vào) thư viện fs (viết tắt của File System). Thư viện này trả về một object có chứa nhiều method khacs nhau giúp tương tác với file trên hệ thống. Ở đây chúng ta sử dụng method readFileSync để đọc nội dung file text.txt. Khi sử dụng phương thức này bạn cần truyền vào đối số đầu tiên là đường dẫn của file mà bạn cần đọc nội dung và đối số thứ hai (tùy ý) để xác định bộ ký tự mã hóa dùng khi lưu file trên máy, ở đây chúng ta chọn bộ ký tự mã hóa file là UTF-8.
Lưu ý: Nếu file read_asyn.js ở cùng với thư mục chứa thư mục text.txt thì khi gọi method readFile của fs bạn có thể thay đổi đường dẫn tuyệt đối C: odejs ext.txt thành đại chỉ tương đối . ext.txt.
Khi chạy đoạn code trên, bạn sẽ thấy kết quả như sau:
Ở trên, bạn thấy chương trình hiển thị hết toàn bộ nội dung của file đang đọc rồi sau đó mới hiển thị dòng chữ Bye. Và cách đọc nội dung như trên được gọi là đọc đồng bộ. Node.js sẽ chỉ thực thi mã lệnh tiếp theo sau khi việc đọc nội dung file đã hoàn tất.
Đọc Không Đồng Bộ
Bây giờ chúng ta cũng nhau tìm hiểu phương thức thứ 2 để đọc nội dung file. Với phương thức này thì quá trình thực thi chương trình của Node.js sẽ thay đổi. Quá trình đọc nội dung file sẽ không cản trở việc thực thi chương trình, các đoạn mã phía sau sẽ vẫn được thực thi cùng lúc với việc đọc nội dung file.
Bây giờ hãy tạo một fiel read_asyn.js với nội dung như sau:
fs = require('fs'); fs.readFile('./text.txt', 'utf-8', function (err, data) { console.log(data); }); console.log('Bye');
Ở đây chúng ta sử dụng một phương thức khác của đối tượng fs đó là readFile. Phương thứcc này được định nghĩa với 3 tham số đầu vào. Tham số đầu dùng để xác định tên file cần đọc nội dung từ đó. Tham số thứ hai là không bắt buộc và bạn có thể tùy ý bỏ đi. Tham số này dùng để xác định bộ ký tự của file được đọc. Tham số thứ ba là một hàm chứa với hai tham số là err và data. Hàm này được gọi là hàm callback (hay hàm gọi ngược lại). Sở dĩ có tên như vậy là do hàm callback không được thực thi ngay khi tiến trình đọc dữ liệu của file được bắt đầu mà chỉ được gọi khi sau khi quá trình đọc dữ liệu này kết thúc.
Cuối cùng, chạy chương trình trên sử dụng chương trình Windows Command Prompt bạn sẽ có được kết quả tương tự như phía dưới:
Ở đây bạn để ý thấy dòng chữ Bye được hiển thị trước nội dung của file text.txt. Điều này là do việc đọc nội dung file không gây gián đoạn các đoạn mã phía sau được thực thi.
Như vậy tới đây bạn đã được làm quen với việc đọc dữ liệu trên file sử dụng hai phương thức khác nhau là đọc đồng bộ và đọc không đồng bộ có trong Node.js.