Cùng tham khảo tiếp bài viết dưới đây của Taimienphi.vn để tìm hiểu về Stream trong Node.js là gì, ghi và đọc dữ liệu vào Stream như thế nào nhé.
Tìm hiểu Stream trong Node.js
Mục lục bài viết
1. Stream trong Node.js là gì?
2. Trong Node.js có mấy loại Stream?
3. Đọc dữ liệu từ Stream trong Node.js
4. Ghi dữ liệu tới Stream trong Node.js
5. Khái niệm Piping Stream trong Node.js
6. Khái niệm Chaining Stream trong Node.js
1. Stream trong Node.js là gì?
Stream trong Node.js là các đối tượng giúp đọc dữ liệu từ nguồn và ghi dữ liệu vào đích.
2. Trong Node.js có mấy loại Stream?
Có 4 loại stream trong Node.js, bao gồm:
- Readable: Stream này được sử dụng cho các hoạt động đọc.
- Writable: Stream này được sử dụng cho các hoạt động ghi.
- Duplex: Stream này được sử dụng cho cả hoạt động đọc và ghi.
- Transform: Là một dạng kiểu Duplex stream, kết quả đầu ra được tính dựa trên dữ liệu mà bạn đã nhập vào.
Mỗi stream là một biến thể EventEmitter, phát sinh các sự kiện khác nhau vào các thời điểm khác nhau. Dưới đây là một số sự kiện phổ biến được sử dụng:
- Data: Sự kiện này được kích hoạt khi dữ liệu có sẵn để đọc.
- End: Sự kiện này được kích hoạt khi không có thêm dữ liệu để đọc.
- Error: Sự kiện này được kích hoạt khi có lỗi bất kỳ xảy ra trong quá trình ghi hoặc nhận dữ liệu.
- Finish: Sự kiện này được kích hoạt khi tất cả dữ liệu trong hệ thống bị xóa.
3. Đọc dữ liệu từ Stream trong Node.js
Tạo một file text đặt tên là input.txt có chứa nội dung dưới đây:
Javatpoint is a one of the best online tutorial website to learn different technologies in a very easy and efficient manner.
Tiếp theo tạo một file JavaScript đặt tên là main.js có chứa đoạn mã:
var fs = require("fs");
var data = '';
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');
// Set the encoding to be utf8.
readerStream.setEncoding('UTF8');
// Handle stream events --> data, end, and error
readerStream.on('data', function(chunk) {
data += chunk;
});
readerStream.on('end',function(){
console.log(data);
});
readerStream.on('error', function(err){
console.log(err.stack);
});
console.log("Program Ended");
Bước tiếp theo mở Node.js command prompt và chạy main.js:
node main.js
Kết quả đầu ra:
4. Ghi dữ liệu vào Steam trong Node.js
Tạo một file JavaScript đặt tên là main.js, có chứa đoạn mã dưới đây:
var fs = require("fs");
var data = 'A Solution of all Technology';
// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');
// Write the data to stream with encoding to be utf8
writerStream.write(data,'UTF8');
// Mark the end of file
writerStream.end();
// Handle stream events --> finish, and error
writerStream.on('finish', function() {
console.log("Write completed.");
});
writerStream.on('error', function(err){
console.log(err.stack);
});
console.log("Program Ended");
Bước tiếp theo mở Node.js command prompt và chạy main.js:
node main.js
Kết quả đầu ra có dạng như dưới đây:
Như bạn có thể thấy file text có tên output.txt được tạo tạo vị trí mà file input.txt và file main.js được lưu. Trong ví dụ này là trên màn hình desktop.
Mở file output.txt và trên màn hình bạn sẽ thấy nội dung như dưới đây:
5. Piping Stream là gì?
Piping là cơ chế cung cấp kết quả đầu ra của một Stream để làm dữ liệu đầu vào cho một Stream khác. Piping thường được sử dụng để lấy dữ liệu từ một Stream làm dữ liệu đầu vào cho Stream khác và không có giới hạn nào về hoạt động Piping này. Dưới đây là ví dụ về piping đọc từ một file và ghi vào một file khác.
Tạo một file JavaScript đặt tên là main.js, có chứa đoạn mã dưới đây:
var fs = require("fs");
// Create a readable stream
var readerStream = fs.createReadStream('input.txt');
// Create a writable stream
var writerStream = fs.createWriteStream('output.txt');
// Pipe the read and write operations
// read input.txt and write data to output.txt
readerStream.pipe(writerStream);
console.log("Program Ended");
Bước tiếp theo mở Node.js command prompt và chạy main.js:
node main.js
Kết quả đầu ra:
Bạn có thể thấy file text có tên output.txt được tạo tạo vị trí mà file input.txt và file main.js được lưu. Trong ví dụ này là trên màn hình desktop.
Mở file output.txt và trên màn hình bạn sẽ thấy nội dung như dưới đây:
6. Chaining Stream trong Node.js
Chaining stream là cơ chế tạo chuỗi các hoạt động đa luồng bằng cách kết nối đầu ra của một luồng với luồng khác, và thường được sử dụng kết hợp với piping. Dưới đây là ví dụ kết hợp piping và chaining stream để nén 1 file, sau đó giải nén.
Tạo một file JavaScript đặt tên là main.js, có chứa đoạn mã dưới đây:
var fs = require("fs");
var zlib = require('zlib');
// Compress the file input.txt to input.txt.gz
fs.createReadStream('input.txt')
.pipe(zlib.createGzip())
.pipe(fs.createWriteStream('input.txt.gz'));
console.log("File Compressed.");
Bước tiếp theo mở Node.js command prompt và chạy main.js:
node main.js
Kết quả trả về có dạng:
Bạn có thể thấy file input.txt dược nén và một file mới được tạo có tên input.txt.gz nằm trong cùng vị trí với file hiện tại.
Để giải nén file, bạn nhập đoạn mã dưới đây vào file main.js:
var fs = require("fs");
var zlib = require('zlib');
// Decompress the file input.txt.gz to input.txt
fs.createReadStream('input.txt.gz')
.pipe(zlib.createGunzip())
.pipe(fs.createWriteStream('input.txt'));
console.log("File Decompressed.");
Bước tiếp theo mở Node.js command prompt và chạy main.js:
node main.js
Kết quả trả về có dạng:
Bài viết trên đây Taimienphi.vn vừa giới thiệu cho bạn stream trong Node.js là gì. Ngoài ra bạn đọc có thể tham khảo thêm một số bài viết Học Node.js đã có trên Taimienphi.vn để tìm hiểu rõ hơn về cách cài đặt Node.js cũng như Callback trong Node.js là gì nhé.