Thứ tư, 14/08/2019 | 00:00 GMT+7

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 :

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:

xin chào.js
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 stdoutstderr , 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:

đối số.js
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:

đối số.js
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:

môi trường.js
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:

môi trường.js
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:

echo.js
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ế:

echo.js
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:

echo.js
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:

  1. 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 .
  2. Kiểm tra xem giá trị của envVarundefined được undefined .
  3. Nếu envVar undefined được undefined , 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ó.
  4. 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ệ.


Tags:

Các tin liên quan