Giới thiệu Node.js

Giới thiệu về Node.js

Node.js là một môi trường chạy JavaScript thời gian thực với mã nguồn mở, đa nền tảng, thực thi mã JavaScript bên ngoài trình duyệt web. Node.js cho phép các nhà phát triển sử dụng JavaScript để viết các công cụ dòng lệnh và cho kịch bản phía máy chủ đang chạy tập lệnh phía máy chủ để tạo nội dung trang web động trước khi trang được gửi tới trình duyệt web của người dùng. Do đó, Node.js đại diện cho mô hình "JavaScript ở mọi nơi", thống nhất phát triển ứng dụng web xung quanh một ngôn ngữ lập trình, thay vì các ngôn ngữ khác nhau cho các tập lệnh phía máy chủ và máy khách.

Node.js được xây dựng trên Công cụ JavaScript của Google Chrome (Công cụ V8). Node.js được phát triển bởi Ryan Dahl vào năm 2009 và phiên bản mới nhất hiện nay là 13.13.0

Node.js là một môi trường thời gian chạy đa nền tảng, mã nguồn mở để phát triển các ứng dụng mạng và phía máy chủ. Các ứng dụng Node.js được viết bằng JavaScript và có thể chạy trong thời gian chạy Node.js trên Microsoft Windows, macOS và Linux.

Node.js cũng cung cấp một thư viện phong phú gồm nhiều mô-đun JavaScript khác nhau, giúp đơn giản hóa việc phát triển các ứng dụng web bằng Node.js đến một mức độ lớn.

Node.js = Môi trường chạy thời gian thực + Thư viện JavaScript

Lịch sử phát triển của Node.js

Node.js được Ryan Dahl viết ban đầu vào năm 2009, khoảng mười ba năm sau khi giới thiệu môi trường JavaScript phía máy chủ đầu tiên, LiveWire Pro Web của Netscape. Bản phát hành ban đầu chỉ hỗ trợ Linux và Mac OS X. Sự phát triển và bảo trì của nó được dẫn dắt bởi Dahl và sau đó được Joyent tài trợ. 

Dahl đã chỉ trích các khả năng hạn chế của máy chủ web phổ biến nhất trong năm 2009, Máy chủ HTTP Apache, để xử lý nhiều kết nối đồng thời (tối đa 10.000 trở lên) và cách tạo mã phổ biến nhất (lập trình tuần tự), khi mã bị chặn toàn bộ quá trình hoặc ngụ ý nhiều ngăn xếp thực thi trong trường hợp kết nối đồng thời.

Dahl đã giới thiệu dự án tại European JSConf vào ngày 8 tháng 11 năm 2009. Node.js đã kết hợp công cụ JavaScript V8 của Google, vòng lặp sự kiện và API I / O cấp thấp.

Vào tháng 1 năm 2010, một trình quản lý gói đã được giới thiệu cho môi trường Node.js được gọi là npm. Trình quản lý gói giúp các lập trình viên dễ dàng hơn trong việc xuất bản và chia sẻ mã nguồn của các thư viện Node.js và được thiết kế để đơn giản hóa việc cài đặt, cập nhật và gỡ cài đặt thư viện.

Vào tháng 6 năm 2011, Microsoft và Joyent đã triển khai phiên bản Windows gốc của Node.js. Bản dựng Node.js đầu tiên hỗ trợ Windows được phát hành vào tháng 7 năm 2011.

Vào tháng 1 năm 2012, Dahl đã bước sang một bên, thúc đẩy đồng nghiệp và người tạo ra npm Isaac Schlueter để quản lý dự án. Vào tháng 1 năm 2014, Schlueter tuyên bố rằng Timothy J. Fontaine sẽ lãnh đạo dự án.

Vào tháng 12 năm 2014, Fedor Indutny đã bắt đầu io.js, một nhánh của Node.js. Do mâu thuẫn nội bộ về quản trị của Joyent, io.js đã được tạo ra như một sự thay thế quản trị mở với một ủy ban kỹ thuật riêng biệt. Không giống như Node.js, các tác giả đã lên kế hoạch để cập nhật io.js với các bản phát hành mới nhất của công cụ JavaScript Google V8.

Vào tháng 2 năm 2015, ý định thành lập Node.js Foundation trung lập đã được công bố. Đến tháng 6 năm 2015, cộng đồng Node.js và io.js đã bỏ phiếu để làm việc cùng nhau dưới Node.js Foundation.

Vào tháng 9 năm 2015, Node.js v0.12 và io.js v3.3 đã được hợp nhất lại với nhau thành Node v4.0. Sự hợp nhất này đã mang các tính năng V8 ES6 vào Node.js và chu kỳ phát hành hỗ trợ dài hạn. Kể từ năm 2016, trang web io.js khuyên các nhà phát triển nên quay lại Node.js và không có kế hoạch phát hành io.js nào nữa do hợp nhất.

Vào tháng 5 năm 2018, một trong những tác giả ban đầu của Node.js, Ryan Dahl, đã phát hành phiên bản đầu tiên của Deno, một thay thế Node.js dựa trên TypeScript mới. Deno, được viết bằng Rust, được thiết kế để giải quyết những thiếu sót nhận thức của Dahl về Node.js.

Năm 2019, JS Foundation và Node.js Foundation đã hợp nhất để tạo thành OpenJS Foundation.

Kiến trúc Node.js

Node.js mang lập trình hướng sự kiện đến các máy chủ web, cho phép phát triển các máy chủ web nhanh bằng JavaScript. Các nhà phát triển có thể tạo các máy chủ có thể mở rộng mà không cần sử dụng luồng, bằng cách sử dụng một mô hình đơn giản hóa của lập trình hướng sự kiện sử dụng các cuộc gọi lại để báo hiệu việc hoàn thành một nhiệm vụ. Node.js kết nối sự dễ dàng của ngôn ngữ kịch bản (JavaScript) với sức mạnh của lập trình mạng Unix.

Node.js được xây dựng trên công cụ JavaScript V8 của Google do nó có nguồn mở theo giấy phép BSD. Nó thành thạo với các nguyên tắc cơ bản trên internet như HTTP, DNS, TCP. JavaScript cũng là một ngôn ngữ nổi tiếng, giúp Node.js có thể truy cập được vào cộng đồng phát triển web.

Các tính năng của Node.js

  • Không đồng bộ và hướng sự kiện - Tất cả các API của thư viện Node.js đều không đồng bộ, nghĩa là không chặn. Về cơ bản, điều đó có nghĩa là máy chủ dựa trên Node.js không bao giờ chờ API trả về dữ liệu. Máy chủ chuyển sang API tiếp theo sau khi gọi nó và cơ chế thông báo về Sự kiện của Node.js giúp máy chủ nhận được phản hồi từ lệnh gọi API trước đó.
  • Rất nhanh - Được xây dựng trên Công cụ JavaScript V8 của Google Chrome, thư viện Node.js rất nhanh trong việc thực thi mã.
  • Đơn luồng nhưng có khả năng mở rộng cao - Node.js sử dụng một mô hình luồng đơn với vòng lặp sự kiện. Cơ chế sự kiện giúp máy chủ phản hồi theo cách không chặn và làm cho máy chủ có khả năng mở rộng cao so với các máy chủ truyền thống tạo ra các luồng hạn chế để xử lý các yêu cầu. Node.js sử dụng một chương trình luồng đơn và cùng một chương trình có thể cung cấp dịch vụ cho số lượng yêu cầu lớn hơn nhiều so với các máy chủ truyền thống như Máy chủ HTTP Apache.
  • Không đệm - Các ứng dụng Node.js không bao giờ đệm bất kỳ dữ liệu nào. Các ứng dụng này chỉ đơn giản là xuất dữ liệu trong khối.
  • Giấy phép - Node.js được phát hành theo giấy phép MIT

Cài đặt môi trường Node.js

Khi chúng ta vào liên kết chính thức của Node.js là https://nodejs.org/en/ thì ta luôn thấy có 2 phiên bản:

  • LTS - Long Term Support đây là phiên bản ổn định, được khuyến cáo sử dụng (cho các hệ thống chạy thực tế)
  • Current đây là phiên bản mới nhất với nhiều tính năng (không ổn định để chạy hệ thống) thường được những người mới học hoặc có thể chạy thử hệ thống với phiên bản Node.js mới nhất để kiểm tra lỗi trước khi nâng cấp Node.js

Với hệ điều hành Windows là macOS sẽ tải xuống được các phiên bản cài đặt dễ dàng cho mỗi hệ điều hành.

Với hệ điều hành Linux (Ubuntu chẳng hạn) thì thực hiện các lệnh sau (để cài đặt Node.js phiên bản 13.x)

$ curl -sL https://deb.nodesource.com/setup_13.x -o nodesource_setup.sh
$ sudo bash nodesource_setup.sh
$ sudo apt-get install nodejs
$ sudo apt-get install build-essential

Kiểm tra cài đặt môi trường Node.js

Sau khi cài đặt xong bạn có thể mở ứng dụng "Command Prompt"/PowerShell trên Windows hoặc ứng dụng Terminal trên Linux hoặc macOS sau đó thực hiện lệnh sau:

node --version
# sẽ hiển thị
v16.4.1

REPL Terminal

REPL là viết tắt của Read Eval Print Loop và nó đại diện cho môi trường máy tính như Windows Console hoặc Shell Unix / Linux nơi lệnh được nhập và hệ thống phản hồi với đầu ra ở chế độ tương tác. Node.js hoặc Node đi kèm với môi trường REPL. REPL thực hiện các nhiệm vụ sau:

  • Đọc - Đọc đầu vào của người dùng, phân tích đầu vào thành cấu trúc dữ liệu JavaScript và lưu trữ trong bộ nhớ.
  • Eval - Đưa và đánh giá cấu trúc dữ liệu.
  • In - In kết quả.
  • Lặp lại - Lặp lại lệnh trên cho đến khi người dùng nhấn ctrl-c hai lần.

Tính năng REPL của Node rất hữu ích trong việc thử nghiệm mã Node.js và để gỡ lỗi mã JavaScript

Các lệnh của REPL:
  • ctrl + c - chấm dứt lệnh hiện tại.
  • ctrl + c hai lần - chấm dứt REPL Node.
  • ctrl + d - chấm dứt REPL nút.
  • Phím Lên / Xuống - xem lịch sử lệnh và sửa đổi các lệnh trước đó.
  • Phím Tab - danh sách các lệnh hiện tại.
  • .help - danh sách tất cả các lệnh.
  • .break - thoát khỏi biểu thức multiline.
  • .clear - thoát khỏi biểu thức multiline.
  • .save fileName - lưu phiên REPL hiện tại vào một tệp.
  • .load tên tệp - tải nội dung tệp trong phiên REPL hiện tại

REPL có thể được bắt đầu bằng cách chạy nút trên shell / console mà không có bất kỳ đối số nào như sau:

$ node
> 1 + 3
4
> 1 + (2*3) -4
3
> x = 10
10
> var y = 10
undefined
> x + y
20
> console.log("Hello World")
Hello World
undefined
var sum = _
undefined
> console.log(sum)
20
undefined

Chạy tệp *.js trên Visual Studio Code

  • Tạo một tệp HelloNode.js
  • Mở tệp và thực liện lệnh sau:
    console.log(1 + 3)
    console.log(1 + (2*3) -4)
    var x = 10
    var y = 10
    sum = x + y
    console.log("Hello Node.js!");
    console.log("sum = " + sum);​
  • Mở Terminal thực hiện lệnh sau:
    node HelloNode.js​
  • Kết quả:
    4
    3
    Hello Node.js!
    sum = 20​

Chạy tệp *.js Online

Kết luận

  • Bài viết đã cung cấp cho chúng ta cái nhìn tổng quan cũng như lịch sử phát triển của Node.js
  • Cách thức cài đặt môi trường chạy cũng như phát triển Node.js
  • Sử dụng những lệnh cơ bản của REPL Terminal
  • Sử dụng Visual Studio Code để chạy tệp *.js
  • Chạy tệp *.js Online