Bài 1: Hello World
Đây là bài tập đầu tiên sau khi cài đặt node.js vào Win7.
. Mở một folder mới C:\nodeDev
. Dùng editor viết 1 hàng code như dưới. Lưu dưới tên hello1.js trong folder C:\nodeDev
console.log('Hello World!');
Đây là bài tập đơn giản nhất. Viết dòng Hello World ra terminal (stdout) thử xem mình cài đặt node.js có được không. OK! Tại dấu prompt ở terminal mình gõ:
C:\nodeDev> node hello1.js
Hello World
Bài 2: Hello World lên trang web
Bài 2 này mình cũng viết dòng text Hello World nhưng thay vì ra terminal như bài 1, mình sẽ viết ra trang web..
. Vào folder nodeDev đã mở ở bài trên.
. Dùng editor viết những hàng codes như dưới. Lưu dưới tên hello2.js trong folder nodeDev
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(80);
Đây là bài tập viết ra trang web đơn giản nhất. Tại dấu prompt của terminal:
C:\nodeDev> node hello2.js
Mình sẽ thấy ở terminal ngưng lại không có dấu prompt. Có nghĩa program node.js đang chạy ngay trên terminal. Mở một browser và đánh vào khung url: localhost và bấm Enter. Hàng chữ Hello World sẽ hiện lên trang.
Lưu ý: Nếu mình trở ngược lại terminal và gõ Ctrl-C để thoát ra dấu prompt, khi ấy mình ra ngoài browser đánh chữ localhost và Enter. dòng Hello World sẽ không hiện ra nữa. Lý do node.js không còn run hello2.js, có nghĩa webServer không run để nhận đồi hỏi từ browser.
Phân tích bài tập 2:
HTTP Server trong node.js: Thành lập và điều hành
Từ bài trước:
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(80);
-
node.js có thể tự thành lập HTTP server
Khác với những ngôn ngữ tiêu biểu như PHP hay .NET cần phải có sẵn một server để phục vụ browser như Apache hay ASP.NET chẳng hạn, node.js có thể tự làm. Bài tập hai là một thí dụ đơn giản cho việc thành lập HTTP server này.
-
Module http của node.js
Dòng đầu tiên var http = require("http"); có nghĩa biến http là một instance của module http, một trong rất nhiều modules của node.js. Module http bao gồm những hàm (dụng cụ, thiết bị, linh kiện) cần thiết để tạo nên một http server mà createServer() là một trong những hàm đó.
-
createServer()
Khi hàm này run như một instance, instance này có thể đèo theo một hàm mà chỉ chuyện lắng nghe (trong một port chỉ định nào đó listen(80), trong thí dụ này là port 80) xem có browser nào cần gì. Để ý đoạn code dưới hàm creatServer không có argument nào cả. Kiểu như chỉ ngóng nghe nhưng thụ động, bất lực không có khả năng thực hiện gì cả.
http.createServer().listen(80);
-
Arguments của hàm createServer
Nếu một server mà chỉ listen thôi thì đâu hữu dụng gì, vì thế hàm này có thể chứa một argument mà argument này lại là một hàm dùng để điều động những công việc server phải làm. Trong thí dụ này hàm không có tên nên tạm được gọi hàm này là hàm phục vụ nhé.
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(80);
Hàm phục vụ có 2 arguments: request và response. request chứa dòng url từ browser, và response mang những gì hàm phục vụ thực hiện đến trang web. Trong trường hợp này chỉ là dòng Hello World.
Bài tập tuy đơn giản nhưng hàm chứa ý nghĩa của mối tương quan giữa browsers (người tiêu thụ, đòi hỏi) và servers (nguồn cung cấp). Ở đây người tiêu thụ đòi hỏi nguồn cung cấp một cái gì đó cũng được bằng cách dùng khung url của browser làm phương tiện chuyển thông. Để đáp ứng, nguồn cung cấp (program hello2.js) đem đến dòng Hello World. Từ căn bản này chúng ta có thể triển khai sự quan hệ này rộng rãi hơn cho những đòi hỏi và đáp ứng phức tạp hơn, vàthích thú hơn.
Các kiểu viết codes khác nhưng xử lý như nhau
Ngôn ngữ JavaScript là một trong những ngôn ngữ lập trình, cho đến thời điểm nay, có những điểm thích thú nhất. Thí dụ như hàm (function) có thể là một biến (variable). Hàm có thể được định nghĩa ngay tại chỗ, có thể được xử lý tức thì. Vi hàm có thể là biến nên hàm có thể là parameter của một hàm khác. Vân vân ...
Sau đây là những kiểu codes khác nhau của bài 2 nhưng xử lý y chang như nhau:
Nguyên thủy:
var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(80);
Định nghĩa phucvu:
var http = require("http");
var phucvu = function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
};
http.createServer(phucvu).listen(80);
. Nếu chỉ là text res.end cũng đủ:
var phucvu = function(req, res) {
res.writeHead(200, {"Content-Type": "text/plain"});
res.end("Hello World");
};
require("http").createServer(phucvu).listen(80);
. Một hàng không cần phải có dấu chấm phẩy ;; ngoặc đơn (single quotes) thay thế cho ngoặc kép (double quotes):
require('http').createServer(function(req, res){res.end('Hello World')}).listen(80)