07/09/2018, 10:35

Tạo HTTP server với Node.js

Node.js là phần mềm thích hợp cho việc xây dựng các ứng dụng máy chủ trong đó gồm có các ứng dụng web. Trong phần này, tôi sẽ hướng dẫn bạn cách tạo một HTTP server sử dụng Node.js. Để bắt đầu, hãy tạo một file webserver.js với nội dung như sau: var http = require("http"); var server = ...

Node.js là phần mềm thích hợp cho việc xây dựng các ứng dụng máy chủ trong đó gồm có các ứng dụng web. Trong phần này, tôi sẽ hướng dẫn bạn cách tạo một HTTP server sử dụng Node.js.

Để bắt đầu, hãy tạo một file webserver.js với nội dung như sau:

var http = require("http");
var server = http.createServer(function(request, response) {
  response.write("Xin chào!");
  response.end();
});

server.listen(8080);
console.log("Node.js đang chạy trên cổng 8080");

Trước khi đi vào giải thích về nội dung của chương trình trên chúng ta hãy chạy thử xem nó hoạt động như thế nào. Mở command prompt lên và chạy câu lệnh sau:

>node webserver.js

Sau khi chạy lệnh trên bạn sẽ thấy màn hình như sau:

Node.js HTTP Server

Tiếp theo, bạn hãy mở trình duyệt nên và truy cập vào địa chỉ http://localhost:8080, bạn sẽ thấy trình duyệt hiển thị nội dung như hình dưới đây:

Node.js HTTP Server

Chúng ta thấy font bị vỡ khi hiển thị trên trình duyệt, điều này là do HTML trả về từ server chưa quy định bộ ký tự hiển thị cho trình duyệt. Chúng ta sẽ fix điều này sớm ở phần tiếp theo còn bây giờ hãy phân tích chương trình ở trên.

Ở đoạn code trên, trước tiên tôi nạp vào thư viện http có sẵn trong Node.js bằng câu lệnh:

var http = require('http');

Ngay sau dòng lệnh này, tôi tạo ra HTTP Server bằng cách gọi method createServer trong đó có truyền vào một hàm callback với 2 tham số là request và response:

  • request: tham số này chứa các thông tin về truy cập mà người gửi tới ví dụ như địa chỉ URL mà người dùng, cookies người dùng...
  • response: Tham số này được dùng gửi trả về nội dung cho trình duyệt (client).

Ở đây chúng ta gửi trả về trình duyệt bằng cách gọi method write từ response:

response.write('Xin Chào');

Tuy nhiên để hoàn thành quá trình kết nối giữa server (Node.js) và client (trình duyệt) và tránh việc gửi nhiều hơn 1 header chúng ta cần phải gọi method end:

response.end();

Như vậy, bạn đã hoàn tất việc tạo ra một HTTP Server sử dụng Node.js.

Để khắc phục lỗi font bị vỡ ở trên, bạn có thể xử lý đơn giản bằng cách thêm thẻ meta giúp trình duyệt xác định bộ ký tự cần sử dụng khi hiển thị nội dung, cập nhật đoạn mã trên bằng cách thêm vào các thẻ HTML tương ứng sau:

var http = require("http");
var server = http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/html"});
    response.write("<!DOCTYPE html>");
    response.write("<html>");
    response.write("<head>");
    response.write("<meta charset='utf-8'>");
    response.write("<title>Hello World Page</title>");
    response.write("</head>");
    response.write("<body>");
    response.write("Xin chào");
    response.write("</body>");
    response.write("</html>");
    response.end();
});

server.listen(8080);
console.log("Server đang chạy trên cổng 8080");

Ở đây, bạn thấy tôi có thêm vào một đoạn code khác với phần trên:

response.writeHead(200, {"Content-Type": "text/html"});

Câu lệnh này dùng để gửi thông tin header về cho trình duyệt, giúp trình duyệt xác định được loại văn bản mà nó sẽ hiển thị là text/html. Khi truy cập lại địa chỉ http://localhost:8080 bạn sẽ thấy font chữ được hiển thị bình thường.

0