NodeJS từ con số 0 - Module - Http Module - File System Module - URL Module (Phần 1)

1. Node.js nó là cái gì?

  • Node.js là môi trường server theo mã nguồn mở.
  • Node.js miễn phí
  • Node.js chạy đa nền tảng (Windows, Linux, Unix, Mac OS X, etc.)
  • Node.js sử dụng JavaScript.

2.Tại sao sử dụng Node.js?

  • Nhiệm vụ chung cho web server có thể mở file trên server và trả về nội dung cho client.
  • Đây là cách PHP hoặc ASP xử lý request:
    • Gửi task đến hệ thống computer's file.
    • Chờ đợi trong khi file system mở và đọc file.
    • Trả về nội dung file cho clinet.
    • Sẵn sàng tiến hành request tiếp theo.
  • Đây là cách Node.js xử lý request:
    • Gửi task đến hệ thống computer's file.
    • Sẵn sàng tiến hành request tiếp theo.
    • Khi file system mở và đọc file, server trả về nội dung cho client,
  • Node.js hạn chế việc chờ đợi và sẵn sàng cho request tiếp theo.
  • Node.js chạy single-threaded, non-blocking, asynchronously programming, nên kiểm soát bộ nhớ rất hiệu quả.

3.First code Node.js.

  • Khi bạn đã down và cài đặt Nodejs trên máy tính của bạn, hãy thử 1 ví dụ đơn giản nhất là hiển thị "Hello World" trên trình duyệt của bạn.
  • Tạo file Node.js file tên "first.js",và add đoạn code sau:
var http = require('http');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('Hello World!');
}).listen(8080);
  • Nhớ file myfirst.js máy tính của bạn
  • Tiếp đó chúng ta sẽ sử dụng terminal để có thể Initiate the Node.js File. (Ở đây mình dùng VSCode)
cd /Users/FilePathOnYourComputer/firstJS
node first.js

4.Node.js Modules.

  • Nói nhiều quá không bằng bắt tay vào thực hành luôn:

1/ Module Node.js là gì?

  • Module trong Node.js giống với JavaScript libraries, tập hợp các functions bạn muốn thực hiện trong application.

2/ Include Modules:

  • Để include một module, bạn sử dụng func require() với tên giống tên module:
var http = require('http');
  • Bây giờ application của bạn đã có thể truy cập HTTP Module và cho phép tạo server:
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('Hello World!');
}).listen(8080);

3/ Tạo custom Module:

  • Chúng ta sẽ tạo ra module trả về ngày và thời gian hiện tại:
exports.myDateTime = function () {
    return Date();
};
  • Save file trên và đặt tên là "myfirstmodule.js".

4/ Include custom Module:

  • Sử dụng module "myfirstmodule.js" trong Node.js file "demo_module.js":
var http = require('http');
var dt = require('./myfirstmodule');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write("The date and time are currently: " + dt.myDateTime());
    res.end();
}).listen(8080);
  • Chúng ta sử dụng ./ để chỉ nơi chứa module, nghĩa là module được đặt trong cùng thư mục chứ Node.js file.
  • Tiếp đó chúng ta initiate demo và check kết quả trên : http://localhost:8080
demo_module.js

5.Node.js HTTP Module.

1/ Module Node.js là gì?

  • Node.js được xây dựng dựa trên module gọi là HTTP cho phép Node.js có thể truyền data thông qua Hyper Text Transfer Protocol (HTTP).
  • Để include HTTP module, chúng ta dùng require() method:
var http = require('http');

2/ Node.js như một web server:

  • HTTP module có thể tạo một HTTP server để listens server ports và trả response trở về cho client.
  • Sử dụng createServer() method để tạo một HTTP Server:
var http = require('http');

//create a server object:
http.createServer(function (req, res) {
  res.write('Hello World!'); //write a response to the client
  res.end(); //end the response
}).listen(8080); //the server object listens on port 8080
  • Func truyền vào http.createServer() method sẽ được thực thi khi ai đó cố gắng truy cập vào computer thông qua port8080.
  • Save đoạn code trên vào file "demo_http.js". và initiate the file:
node demo_http.js

4/ Add HTTP Header:

  • Nếu trả về từ HTTP server có thể hiển thị HTML, bạn nên include HTTP header đúng content-type:
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('Hello World!');
  res.end();
}).listen(8080);
  • Argument đầu tiên của res.writeHead() method là status code: 200 = OK, argument thứ 2 là 1 object chứa những header trả về.

5/ Đọc Query String:

  • Func truyền vào trong http.createServer() có một req argument đại diện cho request từ client như một object:
  • Object này có một property gọi là "url" chứa những phần của url nằm sau tên domain:
var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(req.url);
    res.end();
}).listen(8080);
  • Save code trên vào file "demo_http_url.js" và initiate:
node demo_http_url.js

6/Chia nhỏ Query String:

  • URL module có thể dễ dàng chia nhỏ query string thành nhiều phần nhỏ:
var http = require('http');
var url = require('url');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  var q = url.parse(req.url, true).query;
  var txt = q.year + " " + q.month;
  res.end(txt);
}).listen(8080);

  • Save code trên vào file "demo_querystring.js" và initiate:
node demo_querystring.js

6.Node.js File System Module.

1/ Node.js - File Server?

  • Node.js file system module cho phép bạn làm việc với file system trên máy tính của bạn:
  • Để inculde File System module chúng ta sử dụng require() method:
var fs = require('fs');
  • File System module: thường được dùng để:
    • Read files
    • Create files
    • Update files
    • Delete files
    • Rename files

2/ Read Files:

  • fs.readFile() method được dùng để đọc file trên máy tính của bạn: Chúng ta sử dụng file demofile.html để làm ví dụ:
<html>
<body>
<h1>My Header</h1>
<p>My paragraph.</p>
</body>
</html>
  • Tiếp đó chúng ta tạo file "demo_readfile.js" và initiate node:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
  fs.readFile('demofile1.html', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    res.end();
  });
}).listen(8080);
node demo_readfile.js

3/ Create Files:

  • The File System module có những method để tạo file mới là:
    • fs.appendFile()
    • fs.open()
    • fs.writeFile()
  • Tạo một file mới dùng appendFile():
var fs = require('fs');

fs.appendFile('mynewfile1.txt', 'Hello content!', function (err) {
  if (err) throw err;
  console.log('Saved!');
});
  • fs.Open method lấy "flag" như argument thứ 2, nếu "flag" = "w" thì "writing". Nếu fle không tồn tại, file trống sẽ được tạo:
  • Tiếp đó chúng ta tạo file trống:
var fs = require('fs');

fs.open('mynewfile2.txt', 'w', function (err, file) {
  if (err) throw err;
  console.log('Saved!');
});

4/ Update Files:

  • The File System module có những method để update file là:
    • fs.appendFile()
    • fs.writeFile()
  • Để update một file dùng appendFile() method ta làm như sau:
var fs = require('fs');

fs.appendFile('mynewfile1.txt', ' This is my text.', function (err) {
  if (err) throw err;
  console.log('Updated!');
});
  • fs.writeFile() method thay thế cho những file quy định:
var fs = require('fs');

fs.writeFile('mynewfile3.txt', 'This is my text', function (err) {
  if (err) throw err;
  console.log('Replaced!');
});

5/ Delete Files:

  • The File System module có method fs.unlink() để delete file:
  • VD:
var fs = require('fs');

fs.unlink('mynewfile2.txt', function (err) {
  if (err) throw err;
  console.log('File deleted!');
});

6/ Rename Files:

  • The File System module có method fs.rename() cho phép chúng ta có thể rename file:
  • VD:
var fs = require('fs');

fs.rename('mynewfile1.txt', 'myrenamedfile.txt', function (err) {
  if (err) throw err;
  console.log('File Renamed!');
});

7.Node.js URL Module.

- The URL module chia nhỏ web address thành những phần nhỏ có thể dễ dàng đọc:
- Để include URL Mode chúng ta sử dụng require() method:
var url = require('url');
  • Parse địa chỉ với url.parse() method, nó sẽ trả về URL object với mỗi phần của address như properties:
var url = require('url');
var adr = 'http://localhost:8080/default.htm?year=2018&month=may';
var q = url.parse(adr, true);

console.log(q.host); //returns 'localhost:8080'
console.log(q.pathname); //returns '/default.htm'
console.log(q.search); //returns '?year=2018&month=may'

var qdata = q.query; //returns an object: { year: 2018, month: 'may' }
console.log(qdata.month); //returns 'may'
  • Giờ chúng ta đã biết làm thế nào để parse query string:
  • Tạo hai file html và save chúng cùng file node.js: summer.html
<!DOCTYPE html>
<html>
<body>
<h1>Summer</h1>
<p>I love the sun!</p>
</body>
</html>

winter.html

<!DOCTYPE html>
<html>
<body>
<h1>Winter</h1>
<p>I love the snow!</p>
</body>
</html>
  • Tạo Node.js file để mở request file và trả về content cho client. Nếu có gì sai, hãy throw 404 error: demo_fileserver.js
var http = require('http');
var url = require('url');
var fs = require('fs');

http.createServer(function (req, res) {
  var q = url.parse(req.url, true);
  var filename = "." + q.pathname;
  fs.readFile(filename, function(err, data) {
    if (err) {
      res.writeHead(404, {'Content-Type': 'text/html'});
      return res.end("404 Not Found");
    }  
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    return res.end();
  });
}).listen(8080);
  • Hãy nhớ initiate file:
node demo_fileserver.js
  • Đến đây đừng quên check kết quả trên: ttp://localhost:8080/summer.html và ttp://localhost:8080/winter.html nhé