Friday, May 22, 2015

Nodejs Helloworld - đi từ những bước đầu tiên

Chào các bạn,

Hôm nay chúng ta sẽ viết chương trình Hello World và mổ xẻ những chi tiết đầu tiên về NodeJS.

Bài 1: Hello World console

Đâ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
C:\nodeDev> node hello1.js
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.

Phân tích bài tập 2:

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)

Callback - như một Hàm Gọi Hàm

Trong ngôn ngữ lập trình, callback (hàm gọi lại) là một hình thức của hàm gọi hàm. NgaNguyenDuy cũng đã đề cập đến callback trong diễn đàn này và có cho thí dụ về DOM. Ở đây mình chỉ lập lại với thí dụ khác và khai triển thêm theo chiều hướng node.js.
Thế nào là hàm gọi hàm? Quan sát một sự kiện thường sảy ra hằng ngày. Tôi nghe ông ta nói “chào cô”, hay tôi nghe thủ phạm gào to “tao giết mày”. Đại khái là như vậy, khuôn rập như tôi nghe ai đó nói “điền vào chỗ trống”, hay theo ngôn ngữ lập trình tôi nghe(ai nói(câu gì đó)). Để mã ra cho dễ thấy:
function heSaid(word) {
    console.log(word);
}

function iHear(someFunction, value) {
    someFunction(value);
}

iHear(heSaid, "Hello");

Hàm iHear có hai parameters: một hàm nào đó và một giá trị. Hàm heSaid chỉ có một parameter. Khi run đoạn mã trên sẽ chạy ra chữ Hello. Để cho rõ ràng hơn mình chỉnh sửa output của heSaid chút đỉnh như sau:
function heSaid(word) {
    console.log(word);
}

function iHear(someFunction, value) {
    someFunction('I hear he said: "' + value + '."');
}

iHear(heSaid, "Hello");
C:\nodeDev> node callback.js

I hear he said: “Hello.”

Lẽ dĩ nhiên ta cũng thể viết lại hàm gọi như thế này iHear(heSaid, "I love you. I love you so much!");
Hoặc thay vì heSaid ta có thể có một hàm mới the KillerSaid:
function theKillerSaid(word) {
    console.log(word);
}

function iHear(someFunction, value) {
    someFunction('I hear he said: "' + value + '."');
}

iHear(theKillerSaid, "I will kill you");

Callback - như một Hàm Gọi Hàm - thí dụ thực tiễn

Sau đâ là một thí dụ thực tiễn hơn về Array để các bạn khảo sát nhé. Đoạn mã này thay đổi giá trị của một array sao cho những phần tử của array có giá trị ngược lại, dương qua âm hay âm qua dương.
function xulyArray(arr, callback) {
    var resultArr = []; 
    for (var i = arr.length-1; i >= 0; i--)
        resultArr[i] = callback(arr[i]);
    return resultArr;
}

var arr = [1, 2, 3, 4];
var arrReturned = xulyArray(arr, function(arg) {return arg * -1;});
console.log(arrReturned);
C:\nodeDev> node callback.js
[ -1, -2, -3, -4 ]
Share this post
  • Share to Facebook
  • Share to Twitter
  • Share to Google+
  • Share to Stumble Upon
  • Share to Evernote
  • Share to Blogger
  • Share to Email
  • Share to Yahoo Messenger
  • More...

0 comments

:) :-) :)) =)) :( :-( :(( :d :-d @-) :p :o :>) (o) [-( :-? (p) :-s (m) 8-) :-t :-b b-( :-# =p~ :-$ (b) (f) x-) (k) (h) (c) cheer

 
Posts RSSComments RSSBack to top
© 2011 Tự học NodeJS ∙ Designed by BlogThietKe
Released under Creative Commons 3.0 CC BY-NC 3.0