Đầu vào nodejs

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách nhận đầu vào của người dùng trong một Nút. ứng dụng js CLI. Để làm điều này, bạn sẽ cần nghe

const readline = require('readline');
8 (Đầu vào tiêu chuẩn), Nút nào. js hiển thị dưới dạng
const readline = require('readline');
9, một luồng có thể đọc được

Các luồng được sử dụng để xử lý I/O. Bạn có thể tìm hiểu thêm về nó trong tài liệu này

điều kiện tiên quyết

  • Bạn nên có hiểu biết về ngôn ngữ JavaScript

  • Bạn nên có nút. js được cài đặt trên máy tính của bạn

Tổng quan

Thiết lập dự án

Để bắt đầu, hãy thiết lập dự án của chúng tôi

Tạo một thư mục mới có tên là

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
0

Trong thư mục, chạy

npm init -y

Điều này sẽ tạo ra một tệp

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
1

Khi đã xong, hãy tạo một tệp mới có tên

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
2 để viết mã của chúng tôi

gói đọc

Gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 là gói tích hợp trong Node. js.
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 là một trình bao bọc xung quanh I/O tiêu chuẩn

Hãy nhập gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 vào tệp
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
2 của chúng tôi

const readline = require('readline');

Chúng ta nên tạo một đối tượng giao diện

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 mới bằng cách sử dụng phương thức
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
8 và định cấu hình các luồng có thể đọc và ghi. Hãy đặt luồng đầu vào và đầu ra lần lượt là
const readline = require('readline');
9 và
const readline = require('readline');
40

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

Chúng ta có thể đặt câu hỏi cho người dùng bằng cách sử dụng phương pháp

const readline = require('readline');
41

Phương thức

const readline = require('readline');
41 nhận 2 đối số

  • Chuỗi. Chuỗi này sẽ được hiển thị dưới dạng câu hỏi cho người dùng

  • Chức năng gọi lại. Phương thức

    const readline = require('readline');
    
    41 sẽ đợi cho đến khi người dùng cung cấp đầu vào. Khi người dùng cung cấp đầu vào, chức năng gọi lại này sẽ được thực thi. Hàm gọi lại sẽ lấy đầu vào của người dùng làm đối số

GHI CHÚ. Chúng ta nên đóng các luồng bằng phương thức

const readline = require('readline');
44 bên trong hàm gọi lại. Nếu không được đóng, quy trình sẽ ở trạng thái không hoạt động

Ví dụ

const readline = require('readline');
4

đầu ra

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
1

Bạn có thể thêm trình xử lý sự kiện cho sự kiện luồng

const readline = require('readline');
45 bằng phương pháp
const readline = require('readline');
46

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
4

đầu ra

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
5

Bạn có thể tìm hiểu thêm về gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 từ tài liệu của nó

địa ngục gọi lại

Vấn đề với phương thức

const readline = require('readline');
41 là nó không trả về Promise. Do đó, chúng tôi không thể sử dụng async/await để tạm dừng luồng chương trình cho đến khi người dùng cung cấp đầu vào

Nếu bạn muốn nhận nhiều đầu vào của người dùng theo trình tự, bạn phải thực hiện việc đó trong hàm gọi lại, như thế này

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
8

Như bạn có thể thấy, điều này có thể nhanh chóng vượt khỏi tầm kiểm soát và mã sẽ khó quản lý

Trình lặp không đồng bộ

Phép lặp không đồng bộ cho phép chúng ta lặp lại dữ liệu không đồng bộ, theo yêu cầu. Bạn có thể tạo trình lặp không đồng bộ lặp qua từng dòng trong luồng đầu vào

Nếu bạn muốn tìm hiểu thêm về Async iterators, hãy tham khảo bài viết này

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
9

Chúng tôi không thể sử dụng từ khóa

const readline = require('readline');
49 bên ngoài hàm
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
10. Vì vậy, chúng ta cần bọc tất cả mã của mình bên trong một hàm async

npm init -y
2

Hãy tạo một chức năng mới có tên là

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
11 để nhắc người dùng và nhận thông tin đầu vào

Chúng ta có thể sử dụng Ký hiệu. asyncIterator của đối tượng

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3 để nhận giá trị tiếp theo trong luồng đầu vào

const readline = require('readline');
0

Bây giờ, chúng ta có thể sử dụng chức năng này để lấy giá trị từ luồng đầu vào và sử dụng từ khóa

const readline = require('readline');
49 để tạm dừng thực thi cho đến khi chúng ta nhận được đầu vào từ người dùng

const readline = require('readline');
1

Gói đồng bộ hóa đường đọc

Nếu bạn không phiền khi cài đặt gói bên ngoài, gói này sẽ tăng kích thước gói của ứng dụng CLI mà bạn đang xây dựng, bạn có thể sử dụng gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
14 để nhận dữ liệu đầu vào từ người dùng theo cách đồng bộ

Hãy cài đặt

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
14 bằng cách chạy

const readline = require('readline');
2

Bây giờ, hãy nhập gói

const readline = require('readline');
3

Tương tự như gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3, bạn có thể sử dụng phương pháp
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
17 để nhắc người dùng nhập liệu

Không giống như gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
3, bạn không phải chuyển hàm gọi lại cho hàm này. Phương thức
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
17 sẽ trả về đầu vào của người dùng

const readline = require('readline');
4

Gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
40 còn có các chức năng khác như
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
41,
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
42, v.v.

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
41 được sử dụng để nhận phản hồi của người dùng từ một phím duy nhất mà không cần nhấn phím Enter. Hàm sẽ trả về
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
44 nếu nhấn “Y” hoặc
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
45 nếu nhấn thứ gì khác

const readline = require('readline');
5

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
42 được sử dụng để nhắc người dùng chọn một mục từ danh sách. Hàm sẽ trả về số mà người dùng đã chọn. Người dùng không phải nhấn nút Enter khi sử dụng chức năng này

const readline = require('readline');
6

đầu ra

const readline = require('readline');
7

Bạn có thể tìm hiểu thêm về gói

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});
14 và các phương pháp khác có sẵn từ trang npm của nó

Hãy tóm tắt lại

  1. Chúng tôi đã sử dụng gói

    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout
    });
    
    3 để nhắc đầu vào từ người dùng

  2. Chúng tôi đã thêm trình xử lý sự kiện cho sự kiện

    const readline = require('readline');
    
    45 của luồng đọc

  3. Chúng tôi đã sử dụng trình vòng lặp async để viết một hàm async để lấy dữ liệu đầu vào từ người dùng nhằm ngăn chặn cuộc gọi lại

    Làm cách nào để lấy đầu vào trong NodeJS?

    Làm việc với đầu vào .
    const readline = yêu cầu('readline'). tạoGiao diện({
    đầu vào. tiến trình. tiêu chuẩn,
    đầu ra. tiến trình. tiêu chuẩn
    dòng đọc. câu hỏi ('Bạn là ai?', tên => {
    bảng điều khiển. log(`Xin chào ${name}. `);
    dòng đọc. đóng lại();

    Làm cách nào để lấy đầu vào trong NodeJS từ bảng điều khiển?

    js kể từ phiên bản 7 cung cấp mô-đun readline để thực hiện chính xác điều này. nhận đầu vào từ một luồng có thể đọc được, chẳng hạn như quy trình. luồng stdin, trong quá trình thực thi Nút. chương trình js là đầu vào đầu cuối, mỗi lần một dòng. const readline = yêu cầu('readline')

    Làm cách nào để đọc đầu vào trong js?

    Trong JavaScript, chúng tôi sử dụng hàm prompt() để yêu cầu người dùng nhập dữ liệu . Là một tham số, chúng tôi nhập văn bản mà chúng tôi muốn hiển thị cho người dùng. Khi người dùng nhấn “on”, giá trị đầu vào được trả về. Chúng tôi thường lưu trữ đầu vào của người dùng trong một biến để chúng tôi có thể sử dụng thông tin trong chương trình của mình.

    Làm cách nào để đợi người dùng nhập liệu trong NodeJS?

    Hàm gọi lại. Rl. phương thức question() sẽ đợi cho đến khi người dùng cung cấp thông tin đầu vào . Khi người dùng cung cấp đầu vào, chức năng gọi lại này sẽ được thực thi. Hàm gọi lại sẽ lấy đầu vào của người dùng làm đối số.