12/08/2018, 17:55

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

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. 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: ...

  • 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.
  • 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ả.
  • 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
  • Tiếp đó chúng ta sẽ truy cập http://localhost:8080 để tận hưởng thành quả.
  • 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

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
  • Bạn sẽ thấy các kết quả khác nhau tùy vào việc truyền query: http://localhost:8080/textyouinput

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
  • Bạn sẽ thấy các kết quả khác nhau tùy vào việc truyền query: http://localhost:8080/?year=2018&month=May

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!');
});
- 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é
0