CĂN BẢN
SERVER
MYSQL
MONGODB
MODULE
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Khởi tạo HTTP web server trong Nodejs

Trong bài viết này chúng ta sẽ đi tìm hiểu về cách để khởi tạo một HTTP Web Server trong Nodejs, giới thiệu về module HTTP tích hợp trong Nodejs. HTTP là module giúp chúng ta khởi tạo một HTTP web server trên ứng dụng Nodejs.

1. HTTP là gì ?

HTTP(Hypertext Transport Protocol) là một giao thức ứng dụng cho phép phân phối, trao đổi, chia sẻ giữa các hệ thống thông tin mới nhau. HTTP là nền tảng của Word Wide Web, đây là nơi là các siêu văn bản, bao gồm các siêu liên kết đến các nguồn đươc phép truy cập. Ví dụ như bạn mở trình duyệt mà truy cập một trang web.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

HTTP có chức năng là cổng đảm bảo giao thức kết nối giữa các yêu cầu của người dùng và phản hồi của server. Ví dụ như bạn đang trong trình duyệt và truy cập vào một trang web (lúc này bạn sẽ đóng vai trò là client), client gửi dữ liệu đến server xử lý. Sau khi dữ liệu được server xử lý thì sẽ phản hồi lại cho client.

2. Khởi tạo HTTP Web Server trong NodeJS

Để khởi tạo một http web server trong Nodejs chúng ta có thể dùng các thư viện bên thứ ba hoặc sử dụng module HTTP có sẵ trong NodeJS. Vì trong seri này là những kiến thức cơ bản nhất của nodejs nên mình sẽ dùng module http có sẵn trong nodejs để khởi tạo một http web server nhé !

Module HTTP trong NodeJS

HTTP module được NodeJS xây dựng cho phéo Nodejs có thể truyền dữ liệu theo phương thức HTTP (Hypertext Transport Protocol)

Module HTTP là một nền tảng của NodeJS giúp khởi tạo để hỗ trợ các protocol phổ biến mà theo các thông thường rất khó để sử dụng, đặc biệt là các tin nhắn là dữ liệu lớn. Module HTTP được xây dựng để không chiếm quá nhiều vùng nhớ Buffer bằng cách stream data (bạn có thể đọc thêm bài viết về Streams trong Nodejs để hiểu rõ hơn nhé) .

Để sử dụng module này bạ chỉ cần khai báo sử dụng nó trong chương trình của mình :

require('http')

Khởi tạo web server bằng NodeJS sử dụng module HTTP

Module HTTP có thể khởi tạo một web server cái mà lắng nghe trên port các yêu cầu của người dùng và phản hồi lại. Bạn có thể tạo một web server trong module http bằng cách sử dụng phương thức createServer() :

const http = require("http");

//Sử dụng phương thức createServer
http.createServer(function(req, res) {
    
    //Phản hồi của server
    res.write("Hello World !");

    //Kết thúc phản hồi
    res.end();
}).listen(3000); //Sử dụng port 3000 để lắng nghe

Phương thức createServer() sẽ trả về một callback function, hàm này sẽ được thực thi khi thực hiện truy cập server sử dụng port 3000. Chúng ta sẽ thấy 2 tham số được trả về ở callback function đó là reqres :

  • req: biến lưu trữ yêu cầu của clients như header, method, url, data,...
  • res: chứa những phương thức và thuộc tính để phản hồi lại clients.

Lưu đoạn code bên trên vào file index.js và mở terminal và gõ dòng lệnh :

node index

Mở trình duyệt lên và truy cập địa chỉ http://localhost:3000 bạn sẽ thấy trình duyệt hiển thị :

http module trong nodejs jpg

Thêm header vào HTTP Server trong module HTTP

Chúng ta có thể tùy chỉnh header của HTTP server bằng cách thêm phương thức writeHead() trong biến res của callback function cái mà được tạo bởi phương thức createServer() bằng cú pháp :

res.writeHead(statusCode, [header])

chúng ta sẽ có 2 tham số có thể truyền vào :

  • statusCode: mã phàn hồi, trình duyệt sẽ dựa vào mã phản hồi để kiểm tra trạng thái của phản hồi.
  • header: truyền vào một object chứa các giá trị header mà bạn muốn trả về.

Trong ví dụ này để thể hiện server phản hồi nội dung như là một HTML và mã phản hồi là 200 (thành công và không có lỗi xảy ra) :

const http = require("http");

//Sử dụng phương thức createServer
http.createServer(function(req, res) {
    //Thêm header vào trong response
    res.writeHead(200, {'Content-Type': 'text/html'});
    
    //Phản hồi của server
    res.write("Hello World !");

    //Kết thúc phản hồi
    res.end();
}).listen(3000); //Sử dụng port 3000 để lắng nghe

Đọc chuỗi truy vấn từ người dùng

Callback function của phương thức server.createServer() trả lại cho chúng ta một tham số đó là req. Như đã đề cập ở trên, đây là một obejct chứa dữ liệu mà client gửi đến server. Nó có chứa một thuộc tính là req.url() chứa chuỗi truy vấn từ người dùng gửi đến:

const http = require("http");

//Sử dụng phương thức createServer
http.createServer(function(req, res) {
    //Thêm header vào trong response
    res.writeHead(200, {'Content-Type': 'text/html'});

    //Phản hồi của server
    res.write(req.url);

    //Kết thúc phản hồi
    res.end();
}).listen(3000); //Sử dụng port 3000 để lắng nghe

Lưu đoạn code bên trên vào file index,js, mở terminal và chạy dòng lệnh :

node index

Nếu bạn thực hiện đúng các bước trên, khi bạn mở trình duyệt và sẽ thấy điều khác biệt giữa 2 địa chỉ :

Địa chỉ 1: http://localhost:3000/freetuts

freetuts net jpg

Địa chỉ 2: http://localhost:3000/nodejs

nodejs freetuts http module trong nodejs jpg

Xây dựng HTTP Web server hoàn chỉnh sử dụng module HTTP

Chúng ta sẽ xây dựng một ứng dụng cho phép người dùng điền thông tin cá nhân vào form và sau khi submit form sẽ hiển thị lại giá trị vừa nhập :

Trước tiên, cần require 2 module đó là HTTP QueryString (dùng để phân tích dữ liệu mà người dùng gửi về)

const http = require("http");

//Sử dụng thư viện querysting để phân tích body 
const qs = require('querystring');

Ta khởi tạo http web server ở port 3000 sử dụng phương thức createServer()

http.createServer(function(req, res) {

}, 3000)

Trong hàm callback chúng ta sẽ phân tích object req để kiểm tra urlmethod:

 //Kiểm tra URL và method
if (req.url === '/' && req.method === 'GET') {

}

if (req.url === '/' && req.method === 'POST') {

}

Trong hàm kiểm tra method GET chúng ta sẽ phản hồi form cho người dùng nhập :

//Hằng số chứa form HTML hiển thị ra trong trường hợp method là GET
const formHTML = `
    <form method="POST" action="/">
        <input type="text" name="fullName" placeholder="Full Name"> 
        <input type="number" name="age" placeholder="Age"> 
        <button type="submit">Send</button>
    </form>
`
//Trả về một form
res.write(formHTML)

//Kết thúc phản hồi
res.end();

Còn hàm kiểm tra là method POST chúng ta sẽ tiến hành xử lý dữ liệu, các bạn nhớ đọc qua về khái niệm Streams trong Nodejs nhé. Module http cũng sử dụng streams rất nhiều đó:

//Biến để chứa body
let body = "";

//Bắt sự kiện data trong streams
req.on("data", function(data) {
  body += data;
});

//Bắt sự kiện end trong streams
req.on("end", function() {
  //phân tích Body
  let postData = qs.parse(body);

  //In ra trong terminal
  console.log(postData);

  //Phản hồi lại clients
  res.write(`Full Name: ${postData.fullName} <br>
     Age: ${postData.age}`);

  //Kết thúc phản hồi
  res.end();
});

Ở đây chúng ta sẽ bắt sự kiện data và end của streams và phân tích, cuối cùng sẽ phản hồi lại clients nội dung. Ghép các đoạn code phía trên ta có đoạn code sau :

const http = require("http");

//Sử dụng thư viện querysting để phân tích body 
const qs = require('querystring');

//Hằng số chứa form HTML hiển thị ra trong trường hợp method là GET
const formHTML = `
    <form method="POST" action="/">
        <input type="text" name="fullName" placeholder="Full Name"> 
        <input type="number" name="age" placeholder="Age"> 
        <button type="submit">Send</button>
    </form>
`
//Sử dụng phương thức createServer
http.createServer(function(req, res) {
    //Thêm header
    res.writeHead(200, {'Content-Type': 'text/html'});

    //Kiểm tra URL và method
    if (req.url === '/' && req.method === 'GET') {
        //Trả về một form
        res.write(formHTML)

        //Kết thúc phản hồi
        res.end();
    }

    //Kiểm tra URL và method
    if (req.url === '/' && req.method === 'POST') {
       //Biến để chứa body
       let body = ''

       //Bắt sự kiện data trong streams
       req.on('data', function(data) {
           body += data
       })

       //Bắt sự kiện end trong streams
       req.on('end', function() {
           //phân tích Body
            let postData = qs.parse(body);

            //In ra trong terminal
            console.log(postData)

            //Phản hồi lại clients
            res.write(`Full Name: ${postData.fullName} <br>
            Age: ${postData.age}`)

            //Kết thúc phản hồi
            res.end();
       })
      
    }
}).listen(3000); //Sử dụng port 3000 để lắng nghe

Lưu nó vào file index.js và mở terminal chạy lệnh sau để khởi tạo http web server :

node index

Truy cập địa chỉ http://localhost:3000/ bạn sẽ thấy form hiển thị ra như sau:

http module trong nodejs vidu jpg

Điền vào form và click Send bạn sẽ thấy server phàn hồi lại dữ liệu bạn vừa nhập:

http module trong nodejs formsubmit jpg

Ví dụ trên là cách khởi tạo một http web server bằng module HTTP, nhưng trong dự án thực tế không sử dụng cách này bởi các dòng lệnh quá dài dòng và phức tạp. Khi sử dụng cách này việc mở rộng dự án dễ dàng là điều không thể. Bởi vậy, khi muốn tạo một http web server chúng ta thường dùng một framework hỗ trợ việc làm việc dễ dàng hơn đó là ExpressJS.

Trên đây là những kiến thức cơ bản về HTTP Web Server sử dụng module HTTP trong NodeJS. Mong bài viết này có thể giúp ích cho bạn cho việc lập trình với NodeJS, cảm ơn bạn đã quan tâm bài viết này.

Cùng chuyên mục:

Crawl dữ liệu website bằng NodeJS cơ bản

Crawl dữ liệu website bằng NodeJS cơ bản

CORS là gì ? Xử lý CORS trong NodeJS

CORS là gì ? Xử lý CORS trong NodeJS

Chắc hẳn trong quá trình xử lý các request tới server thì một vài trường…

Xử lý form trong Express

Xử lý form trong Express

Xây dựng URL trong Express

Xây dựng URL trong Express

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về cách xây…

Populate trong Mongoose

Populate trong Mongoose

Error Handling & Debugging trong Socket.io

Error Handling & Debugging trong Socket.io

Namespaces & Rooms trong Socket.io

Namespaces & Rooms trong Socket.io

Middleware trong Mongoose

Middleware trong Mongoose

Create / Read / Update / Delete trong Mongoose

Create / Read / Update / Delete trong Mongoose

Validation trong Mongoose

Validation trong Mongoose

Subdocuments trong Mongooose

Subdocuments trong Mongooose

Documents trong Mongoose

Documents trong Mongoose

Trong bài viết này chúng ta sẽ tìm hiểu về documents trong Mongoose

Models trong Mongoose

Models trong Mongoose

SchemaTypes trong Mongoose

SchemaTypes trong Mongoose

Schemas trong Mongoose

Schemas trong Mongoose

Mongoose trong NodeJS

Mongoose trong NodeJS

Làm việc với Table MySQL sử dụng Nodejs

Làm việc với Table MySQL sử dụng Nodejs

Kết nối với MongoDB trong NodeJS

Kết nối với MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Top