Stdin NodeJS

Nút. js cung cấp luồng có thể ghi và luồng có thể đọc mặc định. Quá trình. thiết bị xuất chuẩn và quy trình. stdIn lần lượt là các luồng có thể ghi và có thể đọc được.  

Hãy hiểu điều này với một ví dụ.  

Đầu vào tiêu chuẩn và đầu ra tiêu chuẩn.  

ứng dụng1. Hãy tạo một ví dụ với đầu vào tiêu chuẩn và đầu ra tiêu chuẩn

  • Hãy tạo một tên tệp stdInOut. js và một mảng với một danh sách các câu hỏi.  
const questions = [ 
  "What is your name?", 
  "What would you rather be doing?", 
  "What is your preferred programming language?" 
]; 
  • Tạo một hàm mũi tên lấy chỉ mục và viết câu hỏi ra
const ask = (i = 0) => { 
  process.stdout.write(`\n\n\n ${questions[i]}`); 
  process.stdout.write(` > `); 
}; 
ask(); 
  • Create an another array to collect the answers to respective questions 

câu trả lời const = [];

  • Chúng tôi có thể nghe đầu vào bằng cách đăng ký sự kiện 'dữ liệu' trên đầu vào tiêu chuẩn. Tất cả các sự kiện được đăng ký bằng cách gọi phương thức 'bật' với đối số đầu tiên là tên sự kiện và đối số thứ hai là gọi lại.  
process.stdin.on("data", data => { }); 
  • In the callback, we will push the data to answers array. 
process.stdin.on("data", data => { 
answers.push(data.toString().trim()); 
}); 
  • Hãy tiếp tục hỏi một câu hỏi sau mỗi câu hỏi cho đến khi tất cả được trả lời. Và sau khi hoàn thành, chúng tôi thoát.  
process.stdin.on("data", data => { 
answers.push(data.toString().trim()); 
if (answers.length < questions.length) { 
ask(answers.length); 
} else { 
process.exit(); 
} 
}); 
  • Hãy thêm một trình xử lý sự kiện nữa khi thoát để xác nhận rằng tất cả các câu trả lời đều được nắm bắt.  
________số 8
  • Hãy bắt đầu theo mặc định bằng cách đặt câu hỏi đầu tiên.  

hỏi(0);

  • Chạy nút stdInOut
  • Câu hỏi đầu tiên sẽ được hiển thị. Và khi trả lời, câu hỏi tiếp theo sẽ được hiển thị. Nó sẽ tiếp tục cho đến khi tất cả các câu hỏi được trả lời.  
  • Đăng trả lời tất cả các câu hỏi, thiết bị đầu cuối sẽ hiển thị các câu trả lời được gửi.  
varquestions = [ 
“What is your name?", 
  "What would you rather be doing?", 
  "What is your preferred programming language?" 
]; 
varanswers = []; 
functionask(i) { 
process.stdout.write(`\n\n${questions[i]} >`); 
} 
process.stdin.on('data', function(data) { 
answers.push(data.toString().trim()); 
if (answers.length < questions.length) { 
ask(answers.length); 
  } else { 
process.exit(); 
  } 
}); 
process.on('exit', function() { 
process.stdout.write(`\n\n\n${answers[1]}${answers[0]}, ${answers[2]} is awesome!\n\n`); 
}); 
ask(0); 

đầu ra.  

const ask = (i = 0) => { 
  process.stdout.write(`\n\n\n ${questions[i]}`); 
  process.stdout.write(` > `); 
}; 
0

Giao diện luồng cung cấp để đọc và ghi dữ liệu. Chúng tôi có thể sử dụng điều này để giao tiếp với các tệp, internet, các quy trình khác. Trên thực tế, chúng tôi đã sử dụng điều này trong ví dụ trên và hãy xem xét điều này với một ví dụ khác về luồng tệp.  

ứng dụng1.  

  • Tạo một readStream. js  và nhập fs
  • const fs = yêu cầu(“fs”);
  • hãy sử dụng readStream để đọc từng đoạn tệp thay vì đọc toàn bộ tệp cùng một lúc.  
  • const readStream = fs. createReadStream(“. /Đọc tài liệu. txt”,”UTF-8”);
  • Để ghi lại bài đọc này, hãy nghe readStream. về sự kiện dữ liệu.  
  • readStream. on(“dữ liệu”, dữ liệu => {
const ask = (i = 0) => { 
  process.stdout.write(`\n\n\n ${questions[i]}`); 
  process.stdout.write(` > `); 
}; 
1
  • chạy nút readStream. js
  • Đầu ra sẽ hiển thị nội dung của tập tin chunk theo chunk.  

Ưu điểm của việc đọc từng bit là chúng ta không cần tốn nhiều bộ nhớ để đọc toàn bộ tệp. Ngoài ra, chúng tôi có thể kiểm soát vì tăng sự kiện.  

ví dụ. readStream. once(“dữ liệu”, … ); . Để biết việc đọc đã kết thúc, chúng ta có thể nghe sự kiện 'end'.  

const ask = (i = 0) => { 
  process.stdout.write(`\n\n\n ${questions[i]}`); 
  process.stdout.write(` > `); 
}; 
2

Thậm chí chúng ta có thể chuyển nó sang một luồng có thể ghi khác để cập nhật luồng đã đọc. Để làm điều này, hãy hiểu luồng có thể ghi bằng một ví dụ.  

ứng dụng2.  

Chúng tôi đã sử dụng một luồng có thể ghi. e. quá trình. tiêu chuẩn. write(“Xin chào thế giới”); .  

  • Tạo một tập tin writeStream. js
  • const fs = yêu cầu(“fs”);
  • const writeStream = fs. tạoWriteStream(“. /tập tin của tôi. txt”,”UTF-8”);
  • writeStream. write(“Xin chào thế giới”);
  • chạy nút writeStream
  • Đầu ra không có gì trong thiết bị đầu cuối vì dữ liệu được ghi vào tệp. Vì vậy, hãy mở tệp và xem thế giới chào đó tồn tại.  
  • Chúng tôi có thể mở rộng phần này, để đọc từ thiết bị đầu cuối và ghi lại vào hệ thống tệp.  
const ask = (i = 0) => { 
  process.stdout.write(`\n\n\n ${questions[i]}`); 
  process.stdout.write(` > `); 
}; 
3
  • chạy nút writeStream
  • bây giờ thiết bị đầu cuối đang đợi chúng tôi gõ một cái gì đó.  
  • Nhập một số văn bản và quan sát rằng nội dung được ghi lại vào tệp.  

ứng dụng3.  

Hãy mở rộng thêm ví dụ này để kết hợp readStream để đọc từ một tệp và cập nhật writeStream.  

  • const readStream = fs. createReadStream(“. /Đọc tài liệu. txt”,”UTF-8”);
  • thay thế quy trình. stdin với readStream
  • readStream. on(“dữ liệu”, …);
  • chạy nút writeStream
  • Quan sát rằng nội dung của readFile. txt được đọc từng đoạn và được ghi vào myFile. txt.  

Thông thường, mọi luồng có thể đọc được được thiết kế để hoạt động với mọi luồng có thể ghi. Điều này giúp chúng tôi kết nối luồng có thể đọc được với luồng có thể ghi.  

Stdin có nghĩa là gì trong JavaScript?

stdin có nghĩa là " đầu vào đến từ thiết bị đầu cuối " Việc đọc một dòng trong NodeJS thật kỳ lạ; .

Quá trình CWD () là gì?

tiến trình. cwd() trả về thư mục làm việc hiện tại , i. e. thư mục mà bạn đã gọi lệnh nút. __dirname trả về tên thư mục của thư mục chứa tệp mã nguồn JavaScript.

sigint NodeJS là gì?

ĐĂNG KÝ. Thoát khỏi bàn phím (Ctrl + C). SIGQUIT. Thoát khỏi bàn phím (Ctrl + ). Nó cũng tạo ra một tệp kết xuất lõi. SIGTERM. Thoát khỏi hệ điều hành (ví dụ sử dụng lệnh kill).

TTY trong NodeJS là gì?

tty là một trong những lệnh Unix vui nhộn in (hoặc hiển thị) tên của thiết bị đầu cuối được kết nối với đầu vào tiêu chuẩn ra đầu ra tiêu chuẩn . Chúng thường được sử dụng như một cách để có quyền truy cập vào máy tính để sửa chữa mọi thứ mà không thực sự đăng nhập vào máy tính để bàn có thể bị chặn.