Làm cách nào để đọc từng dòng tệp trong nodejs?
Bài viết này tập trung vào một số cách phổ biến để đọc tệp trong Node. js (cũng sử dụng TypeScript cho các ví dụ mã) Show
Một lỗi phổ biến khi đọc từng dòng tệp trong Node. js là đọc toàn bộ tệp vào bộ nhớ và sau đó chia nhỏ nội dung của nó bằng cách ngắt dòng. Làm điều này có thể làm quá tải hệ thống của bạn, đặc biệt là khi xử lý các tệp lớn Đây là một tệp mẫu có nhiều dòng cần được xử lý từng dòng # app.logLine 1 dòng đọc Nút. js có một đường dẫn mô-đun gốc cung cấp giao diện để đọc dữ liệu từ luồng một dòng tại một thời điểm Chúng tôi có thể sử dụng hành vi này để đọc từ luồng tệp và xử lý từng dòng riêng biệt Về cơ bản, các bước để đạt được điều này là
Đoạn mã sau sử dụng Node. js gốc mô-đun import { createReadStream } from 'fs'86 để đọc tệp trên thành một luồng và in từng dòng import { createReadStream } from 'fs' Gọi hàm import { createReadStream } from 'fs'1 tạo đầu ra sau ConsoleLine 1 Cách tiếp cận này vượt trội so với import { createReadStream } from 'fs'2 thông thường mặc dù Node. js vẫn cố giữ toàn bộ tệp trong bộ nhớ khi truyền tệp đầu vào sang đầu ra Chúng tôi sẽ cần một giải pháp mới nếu bạn có một tệp thực sự lớn để xử lý từng dòng một Luồng sự kiện EventStream là một thư viện NPM phổ biến hứa hẹn sẽ giúp việc tạo và làm việc với các luồng trở nên dễ dàng Để sử dụng EventStream, hãy cài đặt bằng npm npm i --save-exact event-stream Tùy chọn, để cài đặt các loại npm i --save-exact --save-dev @types/event-stream Khi EventStream được cài đặt, chúng tôi sẽ chỉ chuyển luồng đọc tới người nghe để đọc từng dòng tệp Dưới đây là đoạn mã sử dụng ________ 13 để đạt được điều tương tự như đoạn mã trong đoạn mã ________ 486 ở trên ________số 8Phần kết luận Ở đây tôi đã trình bày hai cách khác nhau để đọc từng dòng tệp, một cách có nút. js và một mô-đun khác với thư viện mã nguồn mở phổ biến Chọn một trong các phương pháp tùy thuộc vào nhu cầu của bạn. Và nếu kích thước dữ liệu lớn, bạn nên sử dụng thư viện EventStream để không làm hỏng máy chủ Node Mô-đun 2 cung cấp giao diện để đọc dữ liệu từ luồng Có thể đọc (chẳng hạn như 3) mỗi lần một dòngĐể sử dụng các API dựa trên lời hứa import { createReadStream } from 'fs'1 Để sử dụng API gọi lại và đồng bộ hóa import { createReadStream } from 'fs'2 Ví dụ đơn giản sau đây minh họa cách sử dụng cơ bản của mô-đun 2
Khi mã này được gọi, Nút. ứng dụng js sẽ không kết thúc cho đến khi đóng 5 vì giao diện chờ nhận dữ liệu trên luồng 6Tầng lớp. import * as readline from 'node:readline/promises'; import { stdin as input, stdout as output } from 'node:process'; const rl = readline.createInterface({ input, output }); const answer = await rl.question('What do you think of Node.js? '); console.log(`Thank you for your valuable feedback: ${answer}`); rl.close();7#Các thể hiện của lớp 7 được xây dựng bằng phương thức 9 hoặc import { createReadStream } from 'fs'00. Mọi phiên bản được liên kết với một luồng 6 Có thể đọc và một luồng duy nhất import { createReadStream } from 'fs'02 Có thể ghi. Luồng import { createReadStream } from 'fs'02 được sử dụng để in lời nhắc cho đầu vào của người dùng xuất hiện và được đọc từ luồng 6Biến cố. import { createInterface } 'readline'const readFile = () => { // Step 1 const rlInterface = createInterface({ input: createReadStream('app.log'), output: process.stdout, terminal: false // to indicate this is not TTY }) // Step 2 rlInterface.on('line', (line) => { console.log(line) })} |