SDN302 Chương 1 - Node.js căn bản: kiến trúc và bất đồng bộ
Chương 1 môn SDN302 dựng nền tảng Node.js: bản chất runtime cho phép JavaScript chạy phía máy chủ, đặc trưng đơn luồng nhưng khả năng mở rộng cao nhờ vòng lặp sự kiện (event loop) và I/O bất đồng bộ không chặn, mô hình hướng sự kiện với EventEmitter, cơ chế module và npm, làm việc với hệ thống tệp qua fs.readFile và stream, cùng ba cách xử lý bất đồng bộ là callback, Promise với ba trạng thái pending - fulfilled - rejected, và async/await kèm try/catch. Trọn bộ câu hỏi trắc nghiệm có giải thích.
Bắt đầu bằng Chế độ học nếu bạn muốn đáp án và giải thích hiện ngay sau mỗi câu — không bấm giờ, dừng lúc nào cũng được. Chọn Thi thử khi muốn biết mình đang ở đâu: có bấm giờ, chấm điểm ở cuối, và giải thích chỉ mở sau khi nộp.
Luyện tập theo chủ đề này
Câu hỏi của chủ đề
fs.readFilefs.readSyncfs.readFileSyncfs.readĐể tạo một luồng đọc có thể đọc được trong Node.js, bạn cần sử dụng hàm createReadStream() từ module fs. Hàm này sẽ tạo một luồng đọc từ một tệp tin cụ thể. Ví dụ, bạn muốn đọc nội dung của tệp tin 'input.txt', bạn có thể sử dụng hàm createReadStream() như sau: const fs = require('fs'); const stream = fs.createReadStream('input.txt');. Điều này sẽ tạo một luồng đọc có thể đọc được nội dung của tệp tin 'input.txt'.
Câu hỏi này yêu cầu bạn xác định tuyên bố sai về sự khác biệt giữa setImmediate() và setTimeout(). Câu trả lời đúng là: 'Nếu cả setTimeout() và setImmediate() được gọi trong cùng một vòng lặp, setTimeout() sẽ được thực hiện trước setImmediate()'. Điều này sai vì thực tế setImmediate() sẽ được thực hiện trước setTimeout() khi cả hai được gọi trong cùng một vòng lặp. SetImmediate() được thiết kế để chạy ngay lập tức sau vòng lặp hiện tại, trong khi setTimeout() sẽ chờ đợi cho đến khi hết thời gian chờ đợi. Điều này có thể được minh họa qua ví dụ sau:
var i = 0;
setImmediate(function() { console.log('Immediate', i); i++; });
setTimeout(function() { console.log('Timeout', i); i++; }, 0);Kết quả sẽ là: Immediate 0 Timeout 2 Như vậy, setImmediate() được thực hiện trước setTimeout() khi cả hai được gọi trong cùng một vòng lặp.
fs.readFileSync()fs.readFile()fs.open()fs.load()Trong Node.js, để đọc một tệp tin theo cách không đồng bộ, bạn cần sử dụng hàm fs.readFile(). Hàm này cho phép bạn đọc nội dung của một tệp tin mà không cần phải chờ đợi cho đến khi tệp tin được đọc xong. Điều này giúp tăng hiệu suất và khả năng xử lý của ứng dụng. Hàm fs.readFile() nhận vào hai tham số: tên tệp tin và một hàm callback. Hàm callback sẽ được gọi khi tệp tin được đọc xong, và nó sẽ nhận vào hai tham số: lỗi (nếu có) và nội dung của tệp tin. Ví dụ:
fs.readFile('tên_tệp_tin.txt', 'utf8', (err, data) => {
if (err) console.error(err); else console.log(data);
});
new events.EventEmitter();
emitter.on('event', () => console.log('Event triggered'));
emitter.emit('event');
console.log('End');Để kiểm tra một file có tồn tại hay không, bạn có thể sử dụng phương thức bất đồng bộ (asynchronous) của module fs. Trong đó, phương thức
fs.exists(filePath, function(exists) {
...
}); là một trong những phương thức được sử dụng phổ biến. Phương thức này sẽ kiểm tra xem file tại đường dẫn filePath có tồn tại hay không, và nếu tồn tại thì sẽ trả về giá trị true, ngược lại sẽ trả về false. Ngoài ra, bạn cũng có thể sử dụng phương thức
fs.access(filePath, fs.constants.F_OK, (err) => {
...
}); để kiểm tra file có tồn tại hay không, nhưng phương thức này sẽ trả về một lỗi nếu file không tồn tại.
fshttpurlnetAngularNodeJSReactVueJSĐề có câu hỏi của chủ đề này
2 đề chứa ít nhất một câu thuộc chủ đề — mở đề để làm cả bộ, không chỉ từng câu.