CHƯƠNG 1: GIỚI THIỆU VỀ NODEJS 1.1 Giới thiệu về NodeJS.1 NodeJS là gì và tại sao nên học NodeJS.js là một mã nguồn mở, một môi trường cho các máy chủ và ứng dụng mạng.js sử dụng Google V8 JavaScript engine để thực thi mã, và một tỷ lệ lớn các mô-đun cơ bản được viết bằng JavaScript. Các ứng dụng node.js thì được viết bằng JavaScript.js chứa một thư viện built-in cho phép các ứng dụng hoạt động như một Webserver mà không cần phần mềm như Nginx, Apache HTTP Server hoặc IIS.js cung cấp kiến trúc hướng sự kiện (event-driven) và non-blocking I/O API, tối ưu hóa thông lượng của ứng dụng và có khả năng mở rộng cao Mọi hàm trong Node.js là không đồng bộ (asynchronous). Do đó, các tác vụ đều được xử lý và thực thi ở chế độ nền (background processing) Còn đối với những bạn sinh viên (như mình) thì mình nghĩ một số lí do sau đây sẽ làm bạn không còn phân vân nên hay không nên học nữa: - Node.js là phần nâng cao hơn của javascript. Cho nên rất phù hợp với người mới bắt đầu với lập trình, đã học qua frontend (html, css, js).
Các bạn cần có kiến thức cơ bản về javascript. - Có thể sử dụng 1 ngôn ngữ lập trình (javascript) vừa để xử lý giao diện (frontend) vừa xử lý logic (back-end), nên có 1 sự kết nối trong việc học, việc đọc và sửa code (chung cú pháp) 12 - Node.js cực kì dễ cài đặt và sử dụng. Bạn không cần thêm 1 phần mềm nào chạy server khác (như Glassfish/tomcat cho JavaWeb, Xampp cho php). Gần như tất cả mọi thứ chỉ trong 1 lần setup.js miễn phí và chạy trên nhiều platform (windows, linux, Mac OS, .js có 1 cộng đồng rất nhiều người học với số lượng built-in module (các package hỗ trợ) nhiều, cài đặt bằng npm.js để viết những website thực tế, theo mình trực quan và hứng thú hơn rất nhiều so với việc viết code console trên lớp.
Chưa kể lại với thời gian viết cho ra sản phẩm nhanh.2 Ứng dụng của NodeJS.js thường được sử dụng để: - Phát triển ứng dụng Real-time: mạng xã hội, chat, … - Ứng dụng Single Page Application (SPA): bởi những ứng dụng này thường request rất nhiều đến server thông qua AJAX - Ứng dụng truy vấn tới NoSQL database như MongoDB, CouchDB, … - Ứng dụng CLI: đây là các công cụ sử dụng command-line.3 Hệ sinh thái của NodeJS. Hệ sinh thái module npm mở (open source), ai cũng có thể truy cập và tải về miễn phí, cũng như tạo ra và upload module của riêng họ. Một số module npm phổ biến: ● Express: expressjs, một framework phát triển web dựa trên Sinatra, nền tảng chuẩn cho rất nhiều ứng dụng Node.js bây giờ. ● Connect: Connect là một framework server HTTP mở rộng, cung cấp một bộ các plugins “hiệu năng cao” như middleware, server, đồng thời cũng là nền tảng cho Express.io và sockjs: thành phần server-side của hai websocket thông dụng nhất hiện nay.
● Jade: một trong những template engine phổ biến (chuẩn viết html), dựa trên HTML, nền tảng của Expressjs. ● Mongo và mongojs: gói MongoDB cung cấp những APIs cho hệ cơ sở dữ liệu đối tượng MongoDB trong Node.js ● Redis: thư viện người dùng. ● CoffeeScript: trình biên dịch CoffeeScript cho phép những nhà phát triển viết nên chương trình Node.js bằng Coffee (uống cà phê là viết được Node.js <3) ● Underscore (lodash, lazy): thư viện cung cấp rất nhiều tiện ích, được sử dụng phổ biến nhất trong Javascript, được gói gọn trong Node.js, với cách thực thi khác biệt, hứa hẹn sẽ mang đến hiệu năng tốt hơn. ● Forever: rõ ràng đây là tiện ích thông dụng nhất, giúp cho mã Node chạy một cách liên tục.
Danh sách trên đây chỉ mang tính giới thiệu. Thực tế còn rất nhiều các module mạnh mẽ khác nữa. Cách thiết lập NodeJS. - Download Nodejs Download phiên bản mới nhất của Node.js từ trang Node.
Tại thời điểm bài hướng dẫn này, các phiên bản mới nhất tương ứng với các hệ điều hành như sau: OS Archive name Windows node-v0.msi Linux node-v0.gz Mac node-v0.gz SunOS node-v0.gz - Cài đặt Node.js trên UNIX/Linux/Mac OS X, và SunOS 14 Dựa vào các kiến trúc của các hệ điều hành, tải và giải nén node-v0.gz trong thư mục /tm và sau cùng là giải nén vào thư mục /usr/local/nodejs. Ví dụ: $ sudo apt-get install nodejs Thêm /usr/local/nodejs/bin vào biến môi trường PATH OS Kết quả Linux export PATH=/usr/local/nodejs/bin Mac export PATH=$PATH:/usr/local/nodejs/bin FreeBSD export PATH=$PATH:/usr/local/nodejs/bin - Cài đặt Node.js trên Windows Sử dụng file MSI và theo các hướng dẫn hiện lên khi cài đặt Node. Mặc định, bộ cài đặt Node.js được lưu trữ tại C:\Program Files\nodejs. - Xác nhận quá trình cài đặt Node.js có thành công không Tạo một file js với tên main.js trên máy tính (Windows hoặc Linux) với dòng code dưới đây: /* Hello, World! Vi du kiem tra cai dat node.log("Hello, World!") Bây giờ thực hiện main.js sử dụng trình biên dịch Node.js để xem các kết quả: $ node main.js Nếu mọi thứ thành công, sau khi biên dịch sẽ cho kết quả: Hello, World! 1.
Tầm quan trọng của JavaScript 1. Giới thiệu lại các khái niệm quan trọng của JS. Phạm vi trong ngôn ngữ lập trình thể hiện mức độ truy cập và vòng đời của các biến hay tham số. Scope có thể được xác định trên globally hoặc locally.
Scope là một trong những khái niệm quan trọng đối với developer vì nó sẽ giúp bạn tránh khỏi gặp bug khi đặt tên biến trùng và quản lý bộ nhớ, giá trị của biến hoặc tham số tại mỗi thời điểm hay ngữ cảnh(context) mà nó đang tham chiếu đến => viết code nhanh hơn dễ 15 bảo trì hơn. Vòng đời của một biến trong javascript: Vòng đời của một biến sẽ được bắt đầu khi nó được khai báo Biến local sẽ bị xóa đi khi kết thúc một function Biến global sẽ bị xóa đi khi đóng browser(hoặc tab), lưu ý là biến sẽ duy trì trong một trình duyệt web, các biến toàn cục sẽ bị xóa khi bạn đóng cửa sổ trình duyệt (hoặc tab), nhưng vẫn có sẵn cho các trang mới được tải vào cùng một cửa sổ. Trong javascript ta có thể phân loại scope ra thành 3 loại chính như sau: global scope, local scope. Global scope Biến được khai báo ở ngoài function => biến toàn cục Các biến toàn cục có thể được truy cập bởi tất cả các đoạn script trong webpage Local scope Biến local chỉ có thể được truy cập trong các function mà nó được khai báo Khi làm việc với các function asynchronous do đó chương trình sẽ nhảy bước, do đó để lấy kết quả của hàm ajax, ta phải truyền cho nó 1 callback.
Sau khi hàm AJAX lấy được kết quả, nó sẽ gọi hàm callback với kết quả thu được => không có quy trình, khó khăn trong việc kiểm soát, thiếu tính chặt chẽ. Giả sử bài toán đặt ra ta cần gọi 2 API để lấy dữ liệu, và giao diện chỉ được sinh ra khi có đủ kết quả từ 2 API. Tính cần thiết của ES6-7. - Có 10 tính cần thiết cần phải nhắc đến: + Default Parameters in ES6 + Template Literals in ES6 + Multi-line String in ES6 + Destructuring Assignment in ES6 + Enhanced Object Literals in ES6 + Arrow Function in ES6 + Promises in ES6 + Block-Scoped Constructs Let and Const + Classes in ES6 + Modules in ES6 16 1.
Phiên bản ECMAScript và NodeJS - Thời điểm ECMAScript mới được phát hành, bản thân Netscape cũng tiếp tục hiện thực JavaScript và có phiên bản riêng. Cụ thể, phiên bản ES đầu tiên tương đương với JavaScript 1. ECMAScript 2 chỉ là phiên bản hiệu chỉnh để tương thích với tiêu chuẩn ISO/IEC 16262. ECMAScript 3 là phiên bản có một số cải tiến đáng lưu ý như RegularExpression, try/catch… và tương đương với JavaScript 1.5 của Netscape Navigator 6.5 của Internet Explorer 5.
ECMAScript 4 với đặc tả nổi bật là class, khai báo kiểu, generator, iterator, và E4X (ECMAScript for XML) đã có sự không đồng thuận giữa hai tổ chức có thị phần trình duyệt lớn nhất lúc bấy giờ là Microsoft và Netscape/Mozilla, dẫn đến việc phiên bản này bị loại bỏ. Tuy nhiên vẫn có một hiện thực khá nổi tiếng sử dụng đặc tả này, đó chính là ActionScript 3 dành cho Flash. ECMAScript 5 là phiên bản thay thế ES4, là sự thỏa hiệp của Brendan Eich (lúc này đã là CTO của Mozilla, tổ chức phi lợi nhuận thành lập bởi Netscape và chịu trách nhiệm phát triển trình duyệt nguồn mở Firefox) với các bên phản đối ES4 (trong đó có Yahoo, Microsoft và Google). Những cải tiến trong ES5 không nhiều và vốn ban đầu được Microsoft đưa ra dưới phiên bản đề nghị là ES3.
Một số thay đổi đáng chú ý trong ES5: strict mode, JSON, các phương thức của Object và Array, getter & setter… ES5 được chính thức phát hành vào tháng 12/2009, tương đương với JavaScript 1.5 (Firefox 4, và là phiên bản JavaScript độc lập cuối cùng) và chỉ được hỗ trợ hoàn toàn kể từ Internet Explorer 9. Giai đoạn này cũng đánh dấu sự xuất hiện của Node.js, nền tảng server side thành công nhất của JavaScript. Phiên bản tiếp theo sau ECMAScript 5 mất một khoảng thời gian dài để hoàn tất. Lúc này, Firefox đã chiếm được thị phần đáng kể, IE vẫn chiếm đa số nhưng đang mất dần thị phần và Chrome là anh lính mới nhưng phát triển rất nhanh.
JavaScript nhận được sự quan tâm lớn từ xu hướng phát triển web app nặng về phía Front End với cách tiếp cận AJAX. Tiếp theo sau đó là sự nở rộ của các JavaScript frameworks. Các công ty nắm thị phần trình duyệt đa số đã đạt được sự đồng thuận cao nên dự án cho phiên bản ES tiếp theo được đặt tên là ECMAScript Harmony. ECMAScript 17 Harmony cũng đánh dấu quy trình làm việc mới của tiểu ban ECMA TC39 (Technical Committee 39) với các đặc tả mới được tiến hành hoàn thiện theo module và chuẩn hóa qua 5 bước (tương tự quy trình của W3C cho các module của HTML & CSS).
ECMAScript 6 (ECMAScript 2015), Các đặc tả của ES6 được khóa sổ vào tháng 6 2015 và phiên bản ES được đổi từ số thứ tự thành năm phát hành, ECMAScript 2015. Đây là phiên bản có rất nhiều cải tiến về cú pháp, khiến cho JavaScript gần như lột xác hoàn toàn. Một số đặc tả mới đáng chú ý: - class và public method - block scope và từ khóa let, const - arrow function - template string - generator và iterator - Promise - destructuring assignment - module (còn gọi là ECMAScript module / esm) 1. Công Cụ hỗ trợ lập trình.
Khi học lập trình Nodejs thì các bạn có thể sử dụng IDE hoặc Editor. Nếu sử dụng IDE thì bạn có thể sử dụng IDE tốt nhất cho Node chính là Webstorm của JetBrains, tuy nhiên công cụ này là trả phí và giá khá là cao nên mình không khuyến khích sử dụng nếu bạn là sinh viên hoặc là người mới nghiên cứu về Node JS.