Phân Tích Ứng Dụng "Hello World" - Máy Chủ HTTP

Ở bài trước, mình đã hướng dẫn các bạn tạo ra ứng dụng đầu tiên mang tên "Hello World", vậy ở bài này chúng ta cùng phân tích nó nhé !


Dòng đầu tiên khai báo (chính xác hơn là yêu cầu, giống với import và using) rằng chúng ta sẽ sử dụng module http có sẵn trong Node.js vào trong ứng dụng và sẽ gọi đến nó thông qua biến có tên http.

var http = require("http");

Tiếp đến chúng ta sẽ gọi một trong các hàm có sẵn của module http: createServer. Hàm này sẽ trả về một đối tượng, đối tượng này chứa một hàm/phương thức khác gọi là listen, hàm này nhận vào một tham số kiểu số để sử dụng làm cổng lắng nghe cho máy chủ HTTP.

http.createServer

Bạn đừng chú ý gì tới cái hàm được khai báo sau dấu mở ngoặc của hàm http.createServer vội.

Phân Tích Ứng Dụng "Hello World" - Máy Chủ HTTP

Chúng ta đã có thể viết code để khởi động máy chủ của chúng ta ở cổng 8888 như sau:


Đoạn code này sẽ khởi động một máy chủ HTTP, lắng nghe ở cổng 8888 nhưng không làm gì cả (thậm chí không trả lời các yêu cầu được gửi tới).

Điều thực sự thú vị (nhìn nó hơi buồn cười nếu như bạn đã biết về PHP) ở đây chính là phần định nghĩa/khai báo của hàm được sử dụng nơi mà đúng ra nó phải là một tham số cho createServer().

Hoá ra, định nghĩa hàm kia lại chính là giá trị đầu tiên (và duy nhất) mà chúng ta truyền cho lời gọi hàm createServer(). Bởi vì trong JavaScript, hàm có thể được sử dụng như là tham số đầu vào.

Về cách sử dụng hàm

Ví dụ, bạn có thể viết như sau:


Hãy đọc thật kĩ! Cái chúng ta viết ở đây là, hàm say được sử dụng như là tham số đầu vào cho hàm execute. Không phải giá trị trả về của say, mà chính bản thân nó!

Vì thế, say trở thành biến nội bộ someFunction trong hàm execute, và execute có thể gọi bất kỳ hàm nào trong biến someFunction bằng việc gọi đến hàm (biến) đó (bằng cách thêm dấu ngoặc).

Tất nhiên, vì say nhận một tham số đầu vào, execute cũng có thể truyền một tham số tương tự như thế khi gọi hàm someFunction.

Chúng ta có thể làm, chúng ta đã làm, là sử dụng hàm như một tham số đầu vào cho hàm khác bằng cách sử dụng tên của chúng. Nhưng, chúng ta không nhất thiết phải đi theo hướng vòng vo thế này, từ định nghĩa rồi mới đến sử dụng - chúng ta có thể kết hợp hai bước này lại với nhau ở chung một vị trí/ thời điểm:


Chúng ta định nghĩa hàm muốn thực thi ở ngay chính nơi chúng ta truyền tham số đầu vào.

Với cách này, chúng ta thậm chí không cần phải đặt tên cho hàm đó, nó còn được biết đến với cái tên hàm vô danh (anonymous function).

Đây mới chỉ là thoáng qua cái chúng ta gọi là JavaScript "nâng cao", đừng nôn nóng vội, chúng ta sẽ làm quen với nó từng bước. Hãy tạm thời chấp nhập rằng trong JavaScript chúng ta có thể sử dụng hàm như là một tham số đầu vào cho một hàm khác. Chúng ta có thể gán hàm đó vào một biến nào đó hoặc định nghĩa đồng thời với hàm mà chúng ta muốn truyền vào.

Sử dụng hàm như vậy giúp máy chủ HTTP của chúng ta hoạt động như thế nào

Với những gì bạn vừa học được, hãy quay lại và cải tiến máy chủ HTTP của chúng ta:


Đến bây giờ thì mọi thứ dường như đã được làm sáng tỏ, thực sự cái chúng ta đang làm là truyền cho hàm createServer một hàm vô danh.

Chúng ta cũng có thể đạt được kết quả tương tự với đoạn code sau:


Có thể bây giờ đã đến thời điểm thích hợp để hỏi: Tại sao chúng ta lại thực hiện theo cách đó?

Câu trả lời sẽ có trong bài tiếp theo, các bạn cùng chờ nhé !

Được tạo bởi Blogger.