Hướng dẫn node js html - nút js html

Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách thức để thực hiện thao tác đọc một tệp dữ liệu và gửi trả tới trình duyệt web khi nhận được yêu cầu truy cập tới địa chỉ

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 mà chúng ta đã khởi tạo trong bài trước. Các tác vụ làm việc với các thư mục và các tệp dữ liệu được NodeJS hỗ trợ bằng cách cung cấp cho người viết code một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 chuyên dụng. Hãy cùng tìm hiểu về công cụ này.

Sử dụng một + File system + Promise example + Callback example + Synchronous example + Promises API + Callback API + Synchronous API 6 của NodeJS

Một

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 trong NodeJS thường được đóng gói trong một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
9 đại diện, và chúng ta có thể truy xuất
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
9 này bằng cách sử dụng hàm
// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
1 giống như ở dòng code đầu tiên trong đoạn code
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 ví dụ ở bài trước.

   /* Creating a server */

const http = require('http');

/* ... */

Bên cạnh đó thì bạn cũng có thể sử dụng cú pháp

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
3 của JavaScript để yêu cầu một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 hay một thành phần của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 cần sử dụng. Tuy nhiên thì để sử dụng cú pháp
// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
3 mặc định của JavaScript, chúng ta sẽ cần thực hiện một vài thao tác thiết lập và không hẳn là cần thiết lắm ở thời điểm hiện tại. Do đó mình và bạn sẽ tiếp tục học và sử dụng
// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
7 và
// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
8 của NodeJS thêm một thời gian cho đến khi... một vài bài viết nữa.
Hướng dẫn node js html - nút js html

Trong code ví dụ mở đầu thì

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 mà chúng ta đã sử dụng có tên là
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
0. Đây là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 được thiết kế để cung cấp các công cụ làm việc với giao thức
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
2 - được hiểu nôm na là giao thức truyền tải nội dung siêu văn bản; Trong đó thì cụm từ
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
3 hay
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
4 ở đây là để chỉ các văn bản
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
5.

Nghe rườm rà thật đấy. Nhưng mà chúng ta chỉ cần hiểu tổng quan thôi chứ việc ghi nhớ mấy cái tên đầy đủ của mấy thuật ngữ này cũng không quan trọng lắm đâu.

Hướng dẫn node js html - nút js html

Các

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 được môi trường NodeJS cung cấp mặc định đều được lập tài liệu tại trang chủ của NodeJS ở đây - Tài liệu về các
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 của NodeJS.Tài liệu về các
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 của NodeJS
.

Hướng dẫn node js html - nút js html

Và trong code ví dụ trước đó, hàm

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
7 đã được sử dụng để yêu cầu
const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
0 ở thư viện mặc định của môi trường NodeJS. Chúng ta cũng có thể cài đặt thêm các
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 được chia sẻ qua lại giữa cộng đồng lập trình viên giống như việc sử dụng các
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
1 và
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
2 ở phía
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
3. Tuy nhiên đây cũng sẽ là câu chuyện mà chúng ta nên để dành thêm một vài bài viết nữa.
Hướng dẫn node js html - nút js html

Làm quen với cấu trúc tài liệu của NodeJS

Trong trang tài liệu này thì bạn có thể thấy một thanh điều hướng chính ở phía bên trái là danh sách của tất cả các

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 được cung cấp bởi
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
5. Mỗi một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 sẽ thực hiện một nhóm tác vụ nhất định xoay quanh tên gọi của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 đó. Chúng ta đang cần tìm cách để mở và xem nội dung của một tệp, nên từ khóa phù hợp nhất trong danh sách các
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 mà chúng ta đang thấy ở đây là
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
9 - Tài liệu về
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
0.Tài liệu về
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
0
.

Hướng dẫn node js html - nút js html

Trong trang tài liệu về một

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 bất kỳ của NodeJS, cấu trúc nội dung chung chung sẽ là một cái danh sách các chỉ mục nội dung
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
2 của trang đó rất rất dài. Và ở bên dưới là các đoạn viết nội dung chi tiết cho các chỉ mục đã được liệt kê cực kỳ cực kỳ dài. Tuy nhiên thì điều quan trọng nhất là chúng ta chỉ cần hiểu được cấu trúc tổng quan của cái
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
2 là sẽ ổn thôi.
Hướng dẫn node js html - nút js html

Thông thường thì mỗi

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 sẽ có các
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 nhỏ hơn và được đóng gói thành một vài
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
9 đại diện. Và mỗi
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 sẽ được dành luôn cho một phần ví dụ đại biểu ở ngay phần đầu tiên của trang tài liệu, chỉ đứng sau cái
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
2. Do đó khi bạn nhìn vào danh sách các chỉ mục thì sẽ thấy đầu tiên là tên
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6, rồi rẽ nhánh tới các chỉ mục cấp gần nhất là các ví dụ
const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
0 đại biểu cho các
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 và các chỉ mục tài liệu chi tiết
const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
2 của các
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5; Và cái
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
2 của chúng ta ở đây đang có dạng tổng quan thế này -

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API

Về việc tại sao NodeJS họ không làm các

const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
5 có thể
const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
6 cho các chỉ mục
const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
2 thì mình không rõ. Nhưng đúng là nếu cứ để một danh sách các chỉ mục nội dung rất rất dài như vậy luôn được hiển thị đầy đủ, thì mặc dù nội dung đã được phân cấp rất tuyệt vời cũng vẫn sẽ rất khó cho người đọc có thể theo dõi nếu như không dành thời gian ra để tổng quát lại cái
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
2. 😅

Sau khi đã nhìn qua những cái tên

+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 là
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
0,
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1, và
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
2, chúng ta có thể hiểu lơ mơ là các tác vụ làm việc với các thư mục và các tệp được thực hiện bởi
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
3 có thể được thực thi đồng bộ với sự hỗ trợ của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
4, hoặc được thực thi bất đồng bộ với sự hỗ trợ của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
5 và
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
6. Bởi vì các khái niệm này thì chúng ta đều đã được gặp trong Sub-Series JavaScript rồi. Sub-Series JavaScript rồi.
Hướng dẫn node js html - nút js html

Tuy nhiên thì mình nghĩ là chúng ta vẫn nên ngó qua mấy cái ví dụ

const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});
0 đại biểu của các
+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 xem nhỡ như có hiểu lầm gì không. Với lại tiện thể thì đọc qua phần mở đầu giới thiệu về
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 tổng
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
3 xem có lưu ý gì quan trọng trước khi sử dụng không.
Hướng dẫn node js html - nút js html

Hướng dẫn node js html - nút js html

Ở đây chúng ta có hướng dẫn cơ bản cách yêu cầu một

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 để sử dụng trong tệp JavaScript mà chúng ta đang làm việc. Dạng cú pháp
doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>
2 đang được hiển thị là
doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>
3 - cú pháp mặc định của JavaScript. Còn nếu bạn click vào cái công tắc chuyển đổi
doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>
4 ở phía bên phải thì sẽ thấy code ví dụ trong khung hiển thị đó thay đổi sang cú pháp
doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>
5 và sử dụng hàm
// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
7 như chúng ta đã dùng trong ví dụ trước đó.

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');

Tiếp tục xem các ví dụ đại biểu cho các

+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 ở phía dưới, chúng ta thử so sánh code ví dụ của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
2 và
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 một chút.

const { unlinkSync } = require('fs');

try {
   unlinkSync('/tmp/hello');
   console.log('successfully deleted /tmp/hello');
}
catch (error) {
   // handle the error
}
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});

Đều là code để thực hiện một tác vụ nào đó, đang sử dụng tới các hàm có từ khóa chung là

   /* Creating a server */

const http = require('http');
const fs = require('fs');

const handleRequest = function(request, response) {
   /* var path = 'static' + '\\index.html'; */   // windows
   var path = 'static' + '/index.html';   // linux + mac

   var callback = function(error, data) {
      if (error) {
         throw error;
      }
      else {
         response.setHeader('content-type', 'text/plain');
         response.statusCode = 200;
         response.end(data);
      }
   }; // callback

   fs.readFile(path, callback);
}; // handleRequest

const server = http.createServer(handleRequest);

   /* Start running server */

const port = 3000;
const hostname = '127.0.0.1';

const callback = function() {
   console.log('Server is running at...');
   console.log('http://' + hostname + ':' + port + '/');
};

server.listen(port, hostname, callback);
0 của
const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
9, có dòng code in thông báo là xóa thành công một tệp
   /* Creating a server */

const http = require('http');
const fs = require('fs');

const handleRequest = function(request, response) {
   /* var path = 'static' + '\\index.html'; */   // windows
   var path = 'static' + '/index.html';   // linux + mac

   var callback = function(error, data) {
      if (error) {
         throw error;
      }
      else {
         response.setHeader('content-type', 'text/plain');
         response.statusCode = 200;
         response.end(data);
      }
   }; // callback

   fs.readFile(path, callback);
}; // handleRequest

const server = http.createServer(handleRequest);

   /* Start running server */

const port = 3000;
const hostname = '127.0.0.1';

const callback = function() {
   console.log('Server is running at...');
   console.log('http://' + hostname + ':' + port + '/');
};

server.listen(port, hostname, callback);
2 nào đó. Đúng như cách thức mà chúng ta sử dụng các hàm xử lý bình thường
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
2, và các hàm bất đồng bộ
   /* Creating a server */

const http = require('http');
const fs = require('fs');

const handleRequest = function(request, response) {
   /* var path = 'static' + '\\index.html'; */   // windows
   var path = 'static' + '/index.html';   // linux + mac

   var callback = function(error, data) {
      if (error) {
         throw error;
      }
      else {
         response.setHeader('content-type', 'text/plain');
         response.statusCode = 200;
         response.end(data);
      }
   }; // callback

   fs.readFile(path, callback);
}; // handleRequest

const server = http.createServer(handleRequest);

   /* Start running server */

const port = 3000;
const hostname = '127.0.0.1';

const callback = function() {
   console.log('Server is running at...');
   console.log('http://' + hostname + ':' + port + '/');
};

server.listen(port, hostname, callback);
4 kèm theo
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1. Vậy là không có nhầm lẫn gì rồi.
Hướng dẫn node js html - nút js html

Bây giờ chúng ta cần đặt một chút suy nghĩ cho tác vụ đọc nội dung của một tệp để chọn ra một trong số các

+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )
5 của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
3 và xử lý tác vụ. Rõ ràng là để đọc nội dung của một tệp bất kỳ thì chắc chắn tác vụ này sẽ tạo ra một quãng thời gian trễ cho tiến trình vận hành chung của hệ thống. Do đó
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
4 có lẽ là lựa chọn chỉ dành cho một số ít trường hợp khi chúng ta thực sự không thể làm khác được. Giải pháp đầu tiên mà chúng ta nên ưu tiên sử dụng sẽ luôn là các phương thức xử lý được thực thi bất đồng bộ
   /* Creating a server */

const http = require('http');
const fs = require('fs');

const handleRequest = function(request, response) {
   /* var path = 'static' + '\\index.html'; */   // windows
   var path = 'static' + '/index.html';   // linux + mac

   var callback = function(error, data) {
      if (error) {
         throw error;
      }
      else {
         response.setHeader('content-type', 'text/plain');
         response.statusCode = 200;
         response.end(data);
      }
   }; // callback

   fs.readFile(path, callback);
}; // handleRequest

const server = http.createServer(handleRequest);

   /* Start running server */

const port = 3000;
const hostname = '127.0.0.1';

const callback = function() {
   console.log('Server is running at...');
   console.log('http://' + hostname + ':' + port + '/');
};

server.listen(port, hostname, callback);
4 được cung cấp bởi
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
5 và
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
6.

Đằng nào thì cũng tiện một công mở trình soạn thảo code lên để học NodeJS, chúng ta sẽ thử cả 2 nhóm API này và xem cách viết nào phù hợp với phong cách tư duy logic của mình nhất, hoặc là kiểu định dạng code nào mà mình nhìn thấy vừa mắt nhất.

Hướng dẫn node js html - nút js html

Sử dụng Callback API

Thao tác chúng ta đang cần xử lý là

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
02 nội dung của một tệp, và từ khóa tương ứng sau khi
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
03 qua tiếng Anh thì nó là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
04. Và trong danh sách chỉ mục con của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
5 thì chúng ta có một số cái
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
04 như thế này -

+ fs.read( ... )
+ fs.readdir( ... )
+ fs.readFile( ... )
+ fs.readlink( ... )
+ fs.readv( ... )

Rồi... may quá là có cái

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
07 đúng luôn với nhu cầu cần xử lý. Chắc tới 99.99% là cái mà chúng ta cần tìm rồi, di chuyển tới phần nội dung đó ngay.
Hướng dẫn node js html - nút js html

Hướng dẫn node js html - nút js html

Đầu tiên thì chúng ta thấy có cú pháp tổng quan của

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
07 với các tham số đầu vào là -

  • + File system
       + Promise example
       + Callback example
       + Synchronous example
       + Promises API
       + Callback API
       + Synchronous API
    
    09 - đường dẫn thư mục của tệp cần đọc.
  • [nodejs-blog]
       |
       +---[static]
       |      |
       |      +---[asset]
       |      |      |
       |      |      +---style.css
       |      |      +---main.js
       |      |
       |      +---[post]
       |      |      |
       |      |      +---an-article.html
       |      |      +---another-article.html
       |      |
       |      +---index.html
       |      +---oops.html
       |
       +---server.js
       +---test.js
    
    1 - hàm gọi lại để tiếp nhận và xử lý dữ liệu kết quả hoặc một
    + File system
       + Promise example
       + Callback example
       + Synchronous example
       + Promises API
       + Callback API
       + Synchronous API
    
    9 mô tả ngoại lệ
    + File system
       + Promise example
       + Callback example
       + Synchronous example
       + Promises API
       + Callback API
       + Synchronous API
    
    12 nếu không đọc được tệp vì lý do nào đó.
  • + File system
       + Promise example
       + Callback example
       + Synchronous example
       + Promises API
       + Callback API
       + Synchronous API
    
    13 - các tham số phụ được đặt ở giữa
    + File system
       + Promise example
       + Callback example
       + Synchronous example
       + Promises API
       + Callback API
       + Synchronous API
    
    09 và
    [nodejs-blog]
       |
       +---[static]
       |      |
       |      +---[asset]
       |      |      |
       |      |      +---style.css
       |      |      +---main.js
       |      |
       |      +---[post]
       |      |      |
       |      |      +---an-article.html
       |      |      +---another-article.html
       |      |
       |      +---index.html
       |      +---oops.html
       |
       +---server.js
       +---test.js
    
    1, có thể có hoặc không.

Sau đó thì chúng ta nhìn thấy code ví dụ để đọc một tệp có đường dẫn thư mục là

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
16. Ở đây chúng ta thay cú pháp
doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>
2 bằng
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
18 như đã nói nhé.
Hướng dẫn node js html - nút js html

const { readFile } = require('fs');

readFile('/etc/passwd', function(error, data) {
   if (error)   throw error;
   else         console.log(data);
});

Mọi thứ trông khá gọn gàng và dễ hiểu. Hàm

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 sẽ thực hiện thao tác đọc nội dung của tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
16 bằng một logic xử lý nào đó mà chúng ta không cần quan tâm tới. Tuy nhiên sau khi thực hiện xong thao tác đọc nội dung của tệp đó thì
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 sẽ gọi hàm
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 được truyền vào, để bàn giao kết quả hoạt động.

Lúc này công việc tiếp theo được định nghĩa trong hàm

[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 để xử lý kết quả nhận được. Nếu có một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
24 được trả về thì sẽ throw luôn
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
9 mô tả ngoại lệ đó. Trong trường hợp không có
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
24 được trả về thì có nghĩa là thao tác đọc nội dung của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 đã thành công và có dữ liệu được trả vào tham số
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
28 để in ra
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
29.

Bây giờ chúng ta hãy

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
30 và chạy thử code này xem sao. Đầu tiên chúng ta sẽ cần chuẩn bị một tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 để làm đối tượng mà hàm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 sẽ tìm đến đọc nội dung. Về đường dẫn thư mục thì chúng ta sẽ bắt đầu quy ước từ bây giờ để làm điểm khởi đầu cho các bài viết tiếp theo nữa. Chúng ta sẽ có một thư mục tổng là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
33 với cấu trúc các thư mục con và các tệp bên trong khởi đầu như thế này -
Hướng dẫn node js html - nút js html
Đầu tiên chúng ta sẽ cần chuẩn bị một tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 để làm đối tượng mà hàm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 sẽ tìm đến đọc nội dung. Về đường dẫn thư mục thì chúng ta sẽ bắt đầu quy ước từ bây giờ để làm điểm khởi đầu cho các bài viết tiếp theo nữa. Chúng ta sẽ có một thư mục tổng là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
33 với cấu trúc các thư mục con và các tệp bên trong khởi đầu như thế này -

[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js

Hướng dẫn node js html - nút js html

Chúng ta sẽ khởi đầu với tệp

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 có nội dung đơn giản thôi, một cái tiêu đề là được.
Hướng dẫn node js html - nút js html

doctype html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Homepagetitle>
   <link rel="stylesheet" href="/asset/style.css">
head>
<body>
   <h2>Hello NodeJS !h2>
   <script src="/asset/main.js">script>
body>
html>

Bây giờ trong tệp

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
35 chúng ta sẽ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
30 code của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
37 trong ví dụ ở bài trước, đồng thời
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
30 cả code ví dụ của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
07 trong tài liệu của NodeJS và chỉnh sửa lại một chút để đọc và gửi nội dung của tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 ở dạng phản hồi khi
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 nhận được yêu cầu. Lúc này, các thao tác phản hồi lại yêu cầu
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
42 sẽ được di chuyển vào bên trong định nghĩa hàm
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 để có thể sử dụng được biến
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
28.

   /* Creating a server */

const http = require('http');
const fs = require('fs');

const handleRequest = function(request, response) {
   /* var path = 'static' + '\\index.html'; */   // windows
   var path = 'static' + '/index.html';   // linux + mac

   var callback = function(error, data) {
      if (error) {
         throw error;
      }
      else {
         response.setHeader('content-type', 'text/plain');
         response.statusCode = 200;
         response.end(data);
      }
   }; // callback

   fs.readFile(path, callback);
}; // handleRequest

const server = http.createServer(handleRequest);

   /* Start running server */

const port = 3000;
const hostname = '127.0.0.1';

const callback = function() {
   console.log('Server is running at...');
   console.log('http://' + hostname + ':' + port + '/');
};

server.listen(port, hostname, callback);

Bây giờ thì chúng ta mở cửa sổ dòng lệnh và khởi động

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 thôi.
Hướng dẫn node js html - nút js html

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
0

Nhưng lần này là chúng ta sẽ chạy tệp

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
35 nhé.
Hướng dẫn node js html - nút js html

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
1
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
2

http://127.0.0.1:3000/

Hướng dẫn node js html - nút js html

Ồ... vậy là thao tác đọc dữ liệu của hàm

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 đã hoạt động tốt, toàn bộ nội dung của tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 đã được gửi cho trình duyệt web khi
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 nhận được yêu cầu. Nhưng chúng ta không muốn hiển thị code cho người dùng xem như vậy, họ chỉ cần đọc thông tin thôi mà.
Hướng dẫn node js html - nút js html

Sau một hồi lay hoay thì mình cũng tìm ra nguyên nhân và phương án xử lý. Đó là ở câu lệnh

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
51 thứ 2 có nói về kiểu nội dung gửi trả
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
52 và đang được thiết lập để thông báo cho trình duyệt web là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
53 - có nghĩa là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
54.
Hướng dẫn node js html - nút js html

Chắc đây là lý do trình duyệt web nhận được bao nhiêu chữ nghĩa là cứ cho hiện đầy đủ hết lên để người dùng xem luôn; Không cả cần ngó qua xem nội dung đó là cái gì. Chứ nếu trình duyệt web mà biết là code HTML thì chắc chắn là sẽ xử lý khác. Bây giờ chúng ta hãy thử thay đổi chỗ

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
53 thành
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
56 xem sao.
Hướng dẫn node js html - nút js html

Bạn lưu ý là phần mềm

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 của chúng ta sẽ được lưu vào bộ nhớ đệm của máy tính để vận hành, và những thay đổi trong code mà chúng ta tạo ra sẽ không có hiệu lực cho đến khi phần mềm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 được khởi động lại. Bây giờ chúng ta cần thao tác nhấn tổ hợp phím
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
59 để cửa sổ dòng lệnh dừng
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 lại, và chạy lại lệnh
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
61 để phần mềm khởi động lại với code mới.

Hướng dẫn node js html - nút js html

Tuyệt... như vậy là trình duyệt web đã nhận được thông báo rằng

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
62 và chỉ hiển thị nội dung của thẻ tiêu đề
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
63. Như vậy là vấn đề nằm ở hàm xử lý yêu cầu và phản hồi, và chúng ta chưa thể tìm hiểu thêm về những thứ liên quan vào lúc này. Ít nhất thì chúng ta đã biết là hàm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 đã hoạt động hoàn toàn ổn với
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 mà chúng ta truyền vào. Bây giờ chúng ta sẽ thử thao tác đọc tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31 với sự hỗ trợ của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
6.
Hướng dẫn node js html - nút js html

Sử dụng Promises API

Hướng dẫn node js html - nút js html

Tương ứng với phương thức

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
07 của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
5 thì ở đây chúng ta có
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
70. Thay vì truyền vào một
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
1 để tiếp nhận kết quả của thao tác đọc tệp như phần trước thì chúng ta sẽ chỉ truyền vào đường dẫn thư mục của tệp cần đọc và nhận được một object Promise hứa hẹn là sẽ trả lời kết quả của thao tác đọc sớm nhất có thể. Nếu đọc được nội dung của tệp thì sẽ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
72 nội dung cho chúng ta
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
73 một thao tác xử lý tiếp theo; Còn nếu có lỗi phát sinh thì sẽ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
74 cho chúng ta
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
75 một thao tác xử lý ngoại lệ.object Promise hứa hẹn là sẽ trả lời kết quả của thao tác đọc sớm nhất có thể. Nếu đọc được nội dung của tệp thì sẽ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
72 nội dung cho chúng ta
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
73 một thao tác xử lý tiếp theo; Còn nếu có lỗi phát sinh thì sẽ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
74 cho chúng ta
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
75 một thao tác xử lý ngoại lệ.

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
3

Sau khi chỉnh sửa lại hàm

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
76 của
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 để yêu cầu hàm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
19 của
[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
6 thì chúng ta đã có thể gọi hàm và chuyển các thao tác xử lý
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
28 và
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
12 vào hai phương thức
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
73 và
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
75 nối tiếp. Khởi động lại
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5 và kiểm tra kết quả hoạt động thôi.
Hướng dẫn node js html - nút js html

Hướng dẫn node js html - nút js html

Mình đoán là bạn cũng thấy kết quả hoạt động không có gì khác biệt. Mọi thứ đều rất ổn giống như khi sử dụng

[nodejs-blog]
   |
   +---[static]
   |      |
   |      +---[asset]
   |      |      |
   |      |      +---style.css
   |      |      +---main.js
   |      |
   |      +---[post]
   |      |      |
   |      |      +---an-article.html
   |      |      +---another-article.html
   |      |
   |      +---index.html
   |      +---oops.html
   |
   +---server.js
   +---test.js
5. Như vậy là NodeJS không chỉ cung cấp cho chúng ta một lựa chọn duy nhất cho mỗi tác vụ cần thực hiện, mà thay vào đó thì chúng ta còn có những lựa chọn thay thế. Hãy cùng lưu ý điểm quan trọng này, bởi vì chúng ta sẽ có thể tự tin hơn khi cần phải đưa ra giải pháp mà bản thân cảm thấy phù hợp. Sẽ luôn có nhiều hơn một phương án xử lý tốt cho một tác vụ cần thực hiện.
Hướng dẫn node js html - nút js html

Vấn đề về đường dẫn thư mục

Trong code ví dụ ở phía trên chúng ta đã phải

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
86 một dòng code tạo đường dẫn thư mục để có thể đọc được tệp trên
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
87 hoặc
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
88 do cách biểu thị đường dẫn thư mục của các hệ điều hành có phần khác nhau một chút. Để khắc phục vấn đề này, NodeJS có cung cấp cho chúng ta một
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 hỗ trợ có tên là
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
09.

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
4

Trong code ví dụ ở phía trên, phương thức

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
91 sẽ giúp chúng ta ghép nối tên của tất cả các thư mục được truyền vào theo thứ tự, và tạo ra một đường dẫn phù hợp với hệ điều hành đang chạy
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
5. Trong đó biến
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
93 là một biến toàn cục, có thể được sử dụng ở bất kỳ đâu trong
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
94; Biến này lưu trữ địa chỉ đường dẫn tính từ thư mục gốc của ổ cứng đang chứa thư mục
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
33 tới thư mục đang chứa tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
96 đang sử dụng biến này.

Kết thúc bài viết

Sau khi chắc chắn là đã có thể tự tin đọc nội dung của một tệp với sự hỗ trợ của

const { unlink } = require('fs');

unlink('/tmp/hello', function(error) {
   if (error)   throw error;
   else         console.log('successfully deleted /tmp/hello');
});
9 rồi thì chúng ta bắt đầu đi tới những câu hỏi tiếp theo. Ở đây chúng ta đang truyền vào hàm đọc tệp một đường dẫn tĩnh
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
98. Nếu bây giờ chúng ta gõ vào thanh địa chỉ của trình duyệt web để yêu cầu tải một tệp khác, ví dụ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
99, để đọc một bài viết thì kết quả trả về hiển nhiên vẫn đang là nội dung của trang chủ
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
31.

Như vậy thì điều quan trọng cần làm tiếp theo đó là chúng ta cần phải tìm hiểu cách xem nội dung yêu cầu

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
01 và phân loại xử lý để hàm
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
76 có thể tìm và trả về tệp tương ứng với yêu cầu nhận được. Và đó sẽ là chủ đề của chúng ta trong bài sau. Bây giờ thì chúng ta nên nghỉ giải lao một chút đã. Hẹn gặp lại bạn trong bài viết tiếp theo.
Hướng dẫn node js html - nút js html

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
03

Nhân tiện thì bài viết này của chúng ta nhằm mục đích giới thiệu

// sử dụng các API promises
const fsPromises = require('fs/promises');

// sử dụng các API callback và synchronous
const fs = require('fs');
04 và làm quen với cấu trúc tài liệu hướng dẫn của NodeJS. Do đó bạn có thể tự tra cứu và luyện tập các phương thức để tạo tệp mới và ghi nội dung vào đó, hay xóa một tệp nào đó. Như vậy chắc chắn là bạn sẽ sớm cảm thấy quen thuộc với cách lập tài liệu của NodeJS và chúng ta sẽ có thể tự tin hơn để lướt qua các
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
6 khi cần sử dụng tới một tính năng nào đó do trong thư viện mặc định.
Hướng dẫn node js html - nút js html

Thêm vào đó là mình quên chưa nói về tệp

+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
37 và
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
35. Về cơ bản thì chúng ta sẽ viết và sửa code trong tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
35 để chạy thử. Còn tệp
+ File system
   + Promise example
   + Callback example
   + Synchronous example
   + Promises API
   + Callback API
   + Synchronous API
37 là để bạn chọn ra code mà bạn muốn sử dụng để cập nhật dần đần khi cảm thấy đã chắc chắn logic vận hành của một đoạn code mới nào đó. Bởi vì chúng ta vừa học kiến thức mới và vừa cập nhật nên mình muốn tránh tình huống viết đè ngay code mới thay cho code cũ và ảnh hưởng đến cột mốc logic vận hành cũ, thời điểm mà bạn đang hiểu được chắc chắn tính năng và giới hạn của code đó.

[NodeJS] Bài 4 - Xử Lý Yêu Cầu Web Tĩnh