Tuần trước, tôi đã khám phá các vấn đề lập trình cạnh tranh và cố gắng giải quyết chúng bằng javascript. Tôi đã từng viết mã tại CodeChef, lực lượng mã, spoj, v.v. bằng Java nhưng bây giờ là một nhà phát triển javascript, nội tâm của tôi buộc tôi phải thử sự cố trong javascript
Điều này có thể khác với những cái khác nhưng tôi thích viết mã cục bộ hơn và khi nó hoạt động tốt, sau đó gửi mã tới các nền tảng trên
Bài viết này sẽ giúp bạn thiết lập và giải thích mã ban đầu sẽ được yêu cầu để nhận đầu vào của người dùng trong nút. js
Trước khi chúng tôi đi sâu vào triển khai, trước tiên hãy hiểu các thuật ngữ chính
Các chức năng chính cần hiểu
tiến trình. stdin()
Quy trình . thuộc tính stdin có sẵn trên mô-đun quy trình lắng nghe đầu vào của người dùng. Thuộc tính này stdin là một luồng có thể đọc được và sử dụng chức năng on để lắng nghe sự kiện.
// Syntax process.stdin.on()
tiến trình. tiêu chuẩn. bản tóm tắt()
Điều này tiếp tục luồng có thể đọc được nếu nó đã bị tạm dừng trước đó. Chức năng này đảm bảo luồng có thể đọc được bắt đầu trước khi chúng tôi nhận đầu vào của người dùng
dòng đọc ()
Chức năng readline() khả dụng trên nút. js Mô-đun Readline cho phép đọc dòng đầu vào theo dòng.
chủ yếu()
Trong các ngôn ngữ lập trình truyền thống, chúng ta thấy hàm main là bắt buộc vì việc thực thi chỉ bắt đầu từ hàm này. Nhưng đây không phải là trường hợp của javascript
Để làm cho nó phù hợp với truyền thống, chúng tôi cũng đã viết chức năng chính ở đây nhưng bạn có thể sử dụng bất kỳ tên chức năng nào bạn thích
Cách sử dụng chức năng này là nhận và xử lý đầu vào của người dùng, gọi hàm cần thiết và in đầu ra ra thiết bị đầu cuối hoặc ghi vào hệ thống tệp
Thực hiện
Báo cáo vấn đề
Thực hiện chức năng lấy 2 đầu vào chiều dài và chiều rộng từ tệp và in đầu ra trên thiết bị đầu cuối
Giải pháp
Tạo 2 file đầu vào. js sẽ có mã và đầu vào. txt chứa đầu vào thực tế. 2 file này nên để chung 1 thư mục
Kiểm tra cấu trúc và chạy trong ảnh chụp màn hình thay thế bên dưới
Trên đây là chỉ số. js, bây giờ ở đầu vào. txt, chúng ta có thể cung cấp 2 số trong đầu vào e. g 10 20 (có dấu cách cách nhau)
Bạn đang phát triển một công cụ CLI nhỏ trong Node. js và muốn có thể nhắc người dùng nhập đầu vào từ dòng lệnh? . js cung cấp mô-đun readline chính xác cho mục đích này. Nó cung cấp một giao diện để đọc dữ liệu từ một luồng có thể đọc được, chẳng hạn như process.stdin, mỗi lần một dòng
Đây là một ví dụ đơn giản nhắc người dùng nhập tên và quốc tịch của họ, sau đó in các chi tiết này trên bảng điều khiển
const readline = require('readline') const rl = readline.createInterface({ input: process.stdin, output: process.stdout }) // ask the user for the name input rl.question(`What's your name? `, name => { // ask for nationality rl.question(`What are you from? `, country => { // log user details console.log(`${name} is from ${country}`) // close the stream rl.close() }) })Trong ví dụ trên, phương thức readline.createInterface() được sử dụng để tạo một thể hiện của readline bằng cách xác định các luồng có thể đọc và ghi
Phương thức // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 0 hiển thị truy vấn (câu hỏi) và đợi người dùng nhập câu trả lời. Khi có sẵn dữ liệu đầu vào, nó gọi phương thức gọi lại chuyển đầu vào của người dùng làm tham số đầu tiên
Cuối cùng, chúng ta gọi phương thức // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 1 trong cuộc gọi lại cuối cùng để đóng giao diện readline. Bạn cũng có thể nghe sự kiện // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 3 được gọi khi luồng bị đóng. Nó có thể hữu ích để làm một số câu hỏi bài làm việc
// listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) })Đọc tài liệu readline để tìm hiểu thêm về tất cả các phương pháp và sự kiện có sẵn
Mô-đun của bên thứ 3
Mô-đun readline là một Nút cấp thấp. js mà bạn có thể nghĩ là quá phức tạp đối với các trường hợp sử dụng phức tạp. Nếu bạn muốn có giao diện cấp cao hơn để xử lý đầu vào của người dùng, chỉ cần sử dụng mô-đun nhắc từ Trình quản lý gói nút (NPM). Bạn có thể thêm nó vào dự án của mình bằng cách thực hiện lệnh sau
$ npm install prompt --saveNó tương đối dễ sử dụng // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6 hơn mô-đun readline. Bạn không cần định cấu hình rõ ràng các luồng có thể đọc và ghi
Hãy để chúng tôi viết lại ví dụ trên bằng cách sử dụng mô-đun // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6
const prompt = require('prompt') // start the prompt prompt.start() // ask the user for the input prompt.get(['name', 'country'], (err, result) => { if (err) { throw err } // print user details console.log(`${result.name} is from ${result.country}`) })Xử lý mật khẩu
Mô-đun // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6 giúp yêu cầu người dùng nhập mật khẩu dễ dàng hơn một cách an toàn. Nó sẽ che dấu đầu vào thay vì hiển thị các ký tự thực của mật khẩu
const prompt = require('prompt') // start the prompt prompt.start() // define properties schema var schema = { properties: { name: { pattern: /^[a-zA-Z\s\-]+$/, message: 'Name must be only letters, spaces, or dashes', required: true }, password: { hidden: true } } } // ask the user for the input prompt.get(schema, (err, result) => { if (err) { throw err } // print user credentials console.log(`${result.name} / ${result.password}`) })Lưu ý thuộc tính $ npm install prompt --save 0 trong ví dụ trên. Nó đảm bảo rằng đầu vào, chúng tôi nhận được từ người dùng cho thuộc tính $ npm install prompt --save 1, được xác thực trước khi chuyển sang đầu vào thuộc tính tiếp theo
Thêm thuộc tính vào một đối tượng
Mô-đun // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6 hiển thị một phương thức tiện lợi khác có tên là $ npm install prompt --save 3 để mở rộng một đối tượng hiện có bằng cách thêm dữ liệu thuộc tính từ dòng lệnh
const prompt = require('prompt') // start the prompt prompt.start() // create an object const user = { name: 'John Doe', country: 'USA' } // extend `user` object prompt.addProperties(user, ['email', 'age'], err => { if (err) { throw err } // print modified object console.dir(user) })Bây giờ, nếu bạn chạy chương trình trên, bạn sẽ thấy một đầu ra tương tự như sau
$ node index.js prompt: email: john.doe@example.com prompt: age: 23 { name: 'John Doe', country: 'USA', email: 'john.doe@example.com', age: '23' }Như bạn có thể thấy ở trên, // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6 có khả năng tùy biến cao. Kiểm tra các tài liệu chính thức để biết thêm thông tin. // listen for close event rl.on('close', () => { console.log('Goodbye 👋') // exit the process process.exit(0) }) 6 có thể là một lựa chọn tốt nếu bạn đang có kế hoạch xây dựng một công cụ CLI vững chắc trong Node. js