Cách viết và chạy chương trình đầu tiên của bạn trong Node.js
Node.js là một môi trường thời gian chạy open-souce phổ biến có thể thực thi JavaScript bên ngoài trình duyệt bằng cách sử dụng công cụ JavaScript V8, công cụ tương tự được sử dụng để cung cấp năng lượng thực thi JavaScript của trình duyệt web Google Chrome. Node runtime thường được sử dụng để tạo các công cụ dòng lệnh và web server .Học Node.js sẽ cho phép bạn viết mã front-end và back-end của bạn bằng cùng một ngôn ngữ. Sử dụng JavaScript trong toàn bộ ngăn xếp của bạn có thể giúp giảm thời gian chuyển đổi ngữ cảnh và các thư viện được chia sẻ dễ dàng hơn giữa server back-end và các dự án front-end của bạn.
Ngoài ra, nhờ hỗ trợ thực thi không đồng bộ, Node.js vượt trội trong các việc I / O chuyên sâu, đó là điều khiến nó trở nên rất phù hợp với web. Các ứng dụng thời gian thực, như phát trực tuyến video hoặc các ứng dụng liên tục gửi và nhận dữ liệu, có thể chạy hiệu quả hơn khi được viết bằng Node.js.
Trong hướng dẫn này, bạn sẽ tạo chương trình đầu tiên của bạn với node.js . Bạn sẽ được giới thiệu một số khái niệm dành riêng cho Node và xây dựng theo cách của bạn để tạo một chương trình giúp user kiểm tra các biến môi trường trên hệ thống của họ. Để làm điều này, bạn sẽ học cách xuất chuỗi ra console , nhận đầu vào từ user và truy cập các biến môi trường.
Yêu cầu
Để hoàn thành hướng dẫn này, bạn cần :
Node.js được cài đặt trên máy phát triển của bạn. Hướng dẫn này sử dụng Node.js version 10.16.0. Để cài đặt tính năng này trên macOS hoặc Ubuntu 18.04, hãy làm theo các bước trong Cách cài đặt Node.js và Tạo Môi trường Phát triển Cục bộ trên macOS hoặc phần “Cài đặt Sử dụng PPA” của Cách Cài đặt Node.js trên Ubuntu 18.04 .
Kiến thức cơ bản về JavaScript, bạn có thể tìm thấy ở đây: Cách viết mã trong JavaScript
Bước 1 - Xuất ra Control panel
Để viết "Xin chào, Thế giới!" chương trình, mở editor dòng lệnh chẳng hạn như nano
và tạo file mới:
- nano hello.js
Khi mở editor , hãy nhập mã sau:
console.log("Hello World");
Đối tượng console
trong Node.js cung cấp các phương thức đơn giản để ghi vào stdout
, stderr
hoặc bất kỳ stream Node.js nào khác, trong hầu hết các trường hợp là dòng lệnh. Phương thức log
in vào stream stdout
, vì vậy bạn có thể thấy nó trong console của bạn .
Trong ngữ cảnh của Node.js, luồng là các đối tượng có thể nhận dữ liệu, như stream stdout
hoặc các đối tượng có thể xuất dữ liệu, như socket mạng hoặc file . Trong trường hợp của các stream stdout
và stderr
, mọi dữ liệu được gửi đến chúng sau đó sẽ được hiển thị trong console . Một trong những điều tuyệt vời về stream là chúng dễ dàng được chuyển hướng, trong trường hợp đó, bạn có thể chuyển hướng kết quả của chương trình của bạn thành một file .
Lưu và thoát nano
bằng cách nhấn CTRL+X
, khi được yêu cầu lưu file , hãy nhấn Y
Bây giờ chương trình của bạn đã sẵn sàng để chạy.
Bước 2 - Chạy chương trình
Để chạy chương trình này, sử dụng lệnh node
như sau:
- node hello.js
Chương trình hello.js
sẽ thực thi và hiển thị kết quả sau:
Output Hello World
Trình thông dịch Node.js đọc file và thực thi console.log("Hello World");
bằng cách gọi phương thức log
của đối tượng console
. Chuỗi "Hello World"
đã được chuyển làm đối số cho hàm log
.
Mặc dù dấu ngoặc kép là cần thiết trong mã để cho biết văn bản là một chuỗi, chúng không được in ra màn hình.
Sau khi xác nhận chương trình hoạt động, hãy làm cho nó tương tác hơn.
Bước 3 - Nhận đầu vào của user thông qua đối số dòng lệnh
Mỗi khi bạn chạy Node.js “Hello, World!” chương trình, nó tạo ra cùng một kết quả . Để làm cho chương trình năng động hơn, hãy lấy đầu vào từ user và hiển thị nó trên màn hình.
Các công cụ dòng lệnh thường chấp nhận các đối số khác nhau để sửa đổi hành vi của chúng. Ví dụ: đang chạy node
với đối số --version
in version đã cài đặt thay vì chạy trình thông dịch. Trong bước này, bạn sẽ làm cho mã của bạn chấp nhận đầu vào của user thông qua các đối số dòng lệnh.
Tạo một file arguments.js
số.js mới bằng nano:
- nano arguments.js
Nhập mã sau:
console.log(process.argv);
Đối tượng process
là một đối tượng Node.js toàn cục chứa các chức năng và dữ liệu liên quan đến quá trình Node.js hiện đang chạy. Thuộc tính argv
là một mảng chuỗi chứa tất cả các đối số dòng lệnh được cung cấp cho một chương trình.
Lưu và thoát nano
bằng lệnh CTRL+X
, khi được yêu cầu lưu file , hãy nhấn Y
Bây giờ khi bạn chạy chương trình này, bạn cung cấp một đối số dòng lệnh như sau:
- node arguments.js hello world
Đầu ra giống như sau:
Output [ '/usr/bin/node', '/home/sammy/first-program/arguments.js', 'hello', 'world' ]
Đối số đầu tiên trong mảng process.argv
luôn là vị trí của file binary Node.js đang chạy chương trình. Đối số thứ hai luôn là vị trí của file đang được chạy. Các đối số còn lại là những gì user đã nhập, trong trường hợp này là: hello
and world
.
Ta chủ yếu quan tâm đến các đối số mà user đã nhập, không phải đối số mặc định mà Node.js cung cấp. Mở arguments.js
file để chỉnh sửa:
- nano arguments.js
Thay đổi console.log(process.arg);
theo sau:
console.log(process.argv.slice(2));
Bởi vì argv
là một mảng, bạn có thể sử dụng phương pháp slice
sẵn của JavaScript để trả về một lựa chọn các phần tử. Khi bạn cung cấp hàm slice
với 2
làm đối số của nó, bạn sẽ nhận được tất cả các phần tử của argv
đứng sau phần tử thứ hai của nó; nghĩa là các đối số mà user đã nhập.
Chạy lại chương trình bằng lệnh node
và các đối số giống như lần trước:
- node arguments.js hello world
Bây giờ, kết quả trông như thế này:
Output [ 'hello', 'world' ]
Đến đây bạn có thể thu thập đầu vào từ user , hãy thu thập đầu vào từ môi trường của chương trình.
Bước 4 - Truy cập các biến môi trường
Biến môi trường là dữ liệu key-value được lưu trữ bên ngoài chương trình và được cung cấp bởi Hệ điều hành. Chúng thường được đặt bởi hệ thống hoặc user và có sẵn cho tất cả các quy trình đang chạy cho mục đích cấu hình hoặc trạng thái. Bạn có thể sử dụng đối tượng process
của Node để truy cập chúng.
Sử dụng nano
để tạo environment.js
file environment.js
:
- nano environment.js
Thêm mã sau:
console.log(process.env);
Đối tượng env
lưu trữ tất cả các biến môi trường có sẵn khi Node.js đang chạy chương trình.
Lưu và thoát như trước và chạy file environment.js
trường.js bằng lệnh node
.
- node environment.js
Khi chạy chương trình, bạn sẽ thấy kết quả tương tự như sau:
Output{ SHELL: '/bin/bash', SESSION_MANAGER: 'local/digitalocean:@/tmp/.ICE-unix/1003,unix/digitalocean:/tmp/.ICE-unix/1003', COLORTERM: 'truecolor', SSH_AUTH_SOCK: '/run/user/1000/keyring/ssh', XMODIFIERS: '@im=ibus', DESKTOP_SESSION: 'ubuntu', SSH_AGENT_PID: '1150', PWD: '/home/sammy/first-program', LOGNAME: 'sammy', GPG_AGENT_INFO: '/run/user/1000/gnupg/S.gpg-agent:0:1', GJS_DEBUG_TOPICS: 'JS ERROR;JS LOG', WINDOWPATH: '2', HOME: '/home/sammy', USERNAME: 'sammy', IM_CONFIG_PHASE: '2', LANG: 'en_US.UTF-8', VTE_VERSION: '5601', CLUTTER_IM_MODULE: 'xim', GJS_DEBUG_OUTPUT: 'stderr', LESSCLOSE: '/usr/bin/lesspipe %s %s', TERM: 'xterm-256color', LESSOPEN: '| /usr/bin/lesspipe %s', USER: 'sammy', DISPLAY: ':0', SHLVL: '1', PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin', DBUS_SESSION_BUS_ADDRESS: 'unix:path=/run/user/1000/bus', _: '/usr/bin/node', OLDPWD: '/home/sammy' }
Lưu ý nhiều biến môi trường bạn thấy phụ thuộc vào cấu hình và cài đặt của hệ thống và kết quả của bạn có thể trông khác đáng kể so với những gì bạn thấy ở đây. Thay vì xem một danh sách dài các biến môi trường, bạn có thể cần truy xuất một biến cụ thể.
Bước 5 - Truy cập một biến môi trường cụ thể
Trong bước này, bạn sẽ xem các biến môi trường và giá trị của chúng bằng cách sử dụng đối tượng process.env
toàn cục và in các giá trị của chúng ra console .
Đối tượng process.env
là một ánh xạ đơn giản giữa các tên biến môi trường và các giá trị của chúng được lưu trữ dưới dạng chuỗi. Giống như tất cả các đối tượng trong JavaScript, bạn truy cập một thuộc tính riêng lẻ bằng cách tham chiếu tên của nó trong dấu ngoặc vuông.
Mở file environment.js
trường.js để chỉnh sửa:
- nano environment.js
Thay đổi console.log(process.env);
đến:
console.log(process.env["HOME"]);
Lưu file và thoát. Bây giờ hãy chạy chương trình environment.js
:
- node environment.js
Đầu ra bây giờ trông như thế này:
Output /home/sammy
Thay vì in toàn bộ đối tượng, bây giờ bạn chỉ in thuộc tính HOME
của process.env
, thuộc tính này lưu trữ giá trị của biến môi trường $HOME
.
, hãy nhớ rằng kết quả từ mã này có thể sẽ khác với những gì bạn thấy ở đây vì nó dành riêng cho hệ thống của bạn. Đến đây bạn có thể chỉ định biến môi trường để truy xuất, bạn có thể nâng cao chương trình của bạn bằng cách hỏi user về biến mà họ muốn xem.
Bước 6 - Thu thập một lập luận để phản hồi cho đầu vào của user
Tiếp theo, bạn sẽ sử dụng khả năng đọc đối số dòng lệnh và biến môi trường để tạo tiện ích dòng lệnh in giá trị của biến môi trường ra màn hình.
Sử dụng nano
để tạo file echo.js
:
- nano echo.js
Thêm mã sau:
const args = process.argv.slice(2); console.log(process.env[args[0]]);
Dòng đầu tiên của echo.js
lưu trữ tất cả các đối số dòng lệnh mà user đã cung cấp vào một biến hằng số được gọi là args
. Dòng thứ hai in biến môi trường được lưu trữ trong phần tử đầu tiên của args
; đó là đối số dòng lệnh đầu tiên mà user cung cấp.
Lưu và thoát nano
, sau đó chạy chương trình như sau:
- node echo.js HOME
Bây giờ, kết quả sẽ là:
Output /home/sammy
Đối số HOME
được lưu vào mảng args
, sau đó được sử dụng để tìm giá trị của nó trong môi trường thông qua đối tượng process.env
.
Đến đây, bây giờ bạn có thể truy cập giá trị của bất kỳ biến môi trường nào trên hệ thống của bạn . Để xác minh điều này, hãy thử xem các biến sau: PWD
, USER
, PATH
.
Truy xuất các biến đơn là tốt, nhưng để user chỉ định bao nhiêu biến họ muốn sẽ tốt hơn.
Bước 7 - Xem nhiều biến môi trường
Hiện tại, ứng dụng chỉ có thể kiểm tra một biến môi trường tại một thời điểm. Sẽ rất hữu ích nếu ta có thể chấp nhận nhiều đối số dòng lệnh và nhận giá trị tương ứng của chúng trong môi trường. Sử dụng nano
để chỉnh sửa echo.js
:
- nano echo.js
Chỉnh sửa file để file có mã sau thay thế:
const args = process.argv.slice(2); args.forEach(arg => { console.log(process.env[arg]); });
Phương thức forEach
là một phương thức JavaScript chuẩn trên tất cả các đối tượng mảng. Nó chấp nhận một hàm gọi lại được sử dụng khi nó lặp qua mọi phần tử của mảng. Bạn sử dụng forEach
trên mảng args
, cung cấp cho nó một hàm gọi lại để in giá trị của đối số hiện tại trong môi trường.
Lưu và thoát khỏi file . Bây giờ chạy lại chương trình với hai đối số:
- node echo.js HOME PWD
Bạn sẽ thấy kết quả sau:
Output /home/sammy /home/sammy/first-program
Hàm forEach
đảm bảo mọi đối số dòng lệnh trong mảng args
đều được in.
Đến đây bạn đã có cách để lấy lại các biến mà user yêu cầu, tuy nhiên ta vẫn cần xử lý trường hợp user nhập dữ liệu xấu.
Bước 8 - Xử lý đầu vào không xác định
Để xem điều gì sẽ xảy ra nếu bạn cung cấp cho chương trình một đối số không phải là một biến môi trường hợp lệ, hãy chạy như sau:
- node echo.js HOME PWD NOT_DEFINED
Đầu ra sẽ tương tự như sau:
Output /home/sammy /home/sammy/first-program undefined
Hai dòng đầu tiên in như mong đợi, và dòng cuối cùng chỉ có undefined
. Trong JavaScript, giá trị undefined
nghĩa là một biến hoặc thuộc tính chưa được gán giá trị. Vì NOT_DEFINED
không phải là một biến môi trường hợp lệ nên nó được hiển thị là undefined
.
Sẽ hữu ích hơn cho user khi thấy thông báo lỗi nếu đối số dòng lệnh của họ không được tìm thấy trong môi trường.
Mở echo.js
để chỉnh sửa:
- nano echo.js
Chỉnh sửa echo.js
để nó có mã sau:
const args = process.argv.slice(2); args.forEach(arg => { let envVar = process.env[arg]; if (envVar === undefined) { console.error(`Could not find "${arg}" in environment`); } else { console.log(envVar); } });
Tại đây, bạn đã sửa đổi hàm gọi lại được cung cấp cho forEach
để thực hiện những việc sau:
- Nhận giá trị của đối số dòng lệnh trong môi trường và lưu trữ nó trong một biến
envVar
. - Kiểm tra xem giá trị của
envVar
cóundefined
đượcundefined
. - Nếu
envVar
undefined
đượcundefined
, thì ta sẽ in một thông báo hữu ích cho biết rằng không thể tìm thấy nó. - Nếu một biến môi trường được tìm thấy, ta in giá trị của nó.
Lưu ý : Hàm console.error
in thông báo ra màn hình qua stream stderr
, trong khi console.log
in ra màn hình qua stream stdout
. Khi bạn chạy chương trình này qua dòng lệnh, bạn sẽ không nhận thấy sự khác biệt giữa dòng stdout
và dòng stderr
, nhưng bạn nên in lỗi qua dòng stderr
để các chương trình khác có thể xác định và xử lý chúng dễ dàng hơn. có thể cho biết sự khác biệt.
Bây giờ hãy chạy lệnh sau :
- node echo.js HOME PWD NOT_DEFINED
Lúc này kết quả sẽ là:
Output /home/sammy /home/sammy/first-program Could not find "NOT_DEFINED" in environment
Bây giờ khi bạn cung cấp đối số dòng lệnh không phải là biến môi trường, bạn sẽ nhận được thông báo lỗi rõ ràng cho biết như vậy.
Kết luận
Chương trình đầu tiên của bạn hiển thị “Hello World” trên màn hình và bây giờ bạn đã viết tiện ích dòng lệnh Node.js đọc các đối số của user để hiển thị các biến môi trường.
Nếu bạn muốn thực hiện điều này xa hơn, bạn có thể thay đổi hoạt động của chương trình này nhiều hơn nữa. Ví dụ: bạn có thể cần xác thực các đối số dòng lệnh trước khi in. Nếu một đối số không được xác định, bạn có thể trả về lỗi và user sẽ chỉ nhận được kết quả nếu tất cả các đối số là biến môi trường hợp lệ.
Các tin liên quan