Trong bài viết này, mình cùng nhau tìm hiểu cách NodeJS làm việc và xử lý các tác vụ với file nhé.

Module fs trong Nodejs

Xử lý file là công việc khi mình tạo mới, truy cập, chỉnh sửa và lưu trữ file. Mình có thể làm việc với file thông qua module có sẵn trong nodejs đó là fs, viết tắt cho File System.

Cũng như các module khác, khi cần sử dụng một module mình phải cần require() nó.

const fs = require('fs')

Đồng bộ (sync) và Bất đồng bộ (async)

Trước khi tìm hiểu sâu hơn, mình cần biết cách hoạt động của syncasync.

Nói về đồng bộ và không đồng bộ, mình hiểu một cách đơn giản là khi xử lý đồng bộ, chương trình sẽ chạy theo từng dòng code từ trên xuống dưới, dòng dưới sẽ được thực thi khi dòng trên đã hoàn thành, còn bất đồng bộ là khi đoạn code bên dưới được thực thi mặc dù đoạn code bên trên vẫn chưa thực thi xong để cho ra kết quả.

Hàm đọc và viết file

Để viết ra file mình thấy có hai phương thức, đó là fs.writeFileSync()fs.writeFile(). Hai phương thức này khác nhau ở chỗ fs.writeFileSync là đồng bộ, cái còn lại thì không. Việc đọc file cũng vậy, mình sẽ có hai phương thức là fs.readFileSync()fs.readFile().

Vậy nên, với một người đã lập trình C như mình, mình nghĩ là mình sẽ dùng phương thức đồng bộ, fs.writeFileSync()fs.readFileSync(). Sau này, tùy vào vấn đề, mình có thể sẽ cần đến fs.writeFile()fs.readFile(), nhưng bây giờ thì cứ lập trình như “bình thường” đã.

Cách sử dụng

Để viết ra file, mình dùng câu lệnh fs.writeFileSync(PATH_TO_FILE, DATA)

const fs = require('fs');

fs.writeFileSync("note.txt", "This note is written by Nodejs!");

Sau khi chạy chương trình trên, mình có một file mới (nếu file chưa tồn tại) có tên là note.txt với nội dung là This note is written by Nodejs!. Nếu file đã tồn tại mà mình chạy chương trình trên, Nodejs sẽ xóa hết nội dung trong file cũ và ghi lại nội dung mới vào file.

Vậy nếu muốn thêm nội dung thì sao? Mình có biết một hàm là fs.appendFileSync(PATH_TO_FILE, DATA). Cách sử dung giống như khi viết vào file.

Để đọc file, mình dùng câu lệnh fs.readFileSync(PATH_TO_FILE, ENCODING)

const fs = require('fs');

let text = fs.readFileSync("note.txt", "utf-8");

console.log(text);

Vậy là mình đã có thể đọc được thông tin từ trong file rồi.

Kết

Vậy là mình đã biết được những hàm cơ bản để làm việc với file trong Nodejs rồi. Ngoài những phương thức trên, fs còn cung cấp rất nhiều các phương thức hữu ích khác nhau để mình làm việc với thư mục và file. Xem thêm tại docs của Nodejs.

Bonus

Sau khi đọc được file, mình sẽ có thể dùng HTTP server để trả nội dung trang web về cho client.

Mình có file index.html như sau:

<!-- index.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>Hello World!</title>
</head>
<style>
    h1 {
        text-align: center;
        font-family: Consolas;
        font-weight: 500;
        padding-top: 45vh;
    }
</style>
<body>
    <h1> Hello world from HTTP server on NodeJS!</h1>
</body>
</html>

Và mình có file server như sau:

// server.js
const http = require('http');
const fs = require('fs');

http.createServer(function (req, res) {
    if (req.url === '/') {
        let content = fs.readFileSync("index.html", "utf-8");
        res.writeHead(200, {'Content-Type': 'text/html'});
        res.write(content);
        res.end();
    } else {
        res.writeHead(404, {'Content-Type': 'text/html'});
        res.write("</h1>404 Not Found</h1>");
        res.end();
    }
}).listen(8080);
console.log("Server listen on <http://localhost:8080>")

Có thể hiểu đoạn code trên là khi client request tới server, trang NodeJS sẽ đọc file index.html sau đó trả về cho client để browser render thành trang web. Nếu client requests tới một URL khác thì server sẽ trả về lỗi HTTP 404 Not Found.

Bây giờ, chỉ cần chạy file server.js và thưởng thức thành quả là một trang web bé xinh rồi.

HAPPY CODING!

Code Cho Vui, Kunniii