Một số hàm tiện ích trong modules Util của Node.js

Một số hàm tiện ích trong modules Util của Node.js

Tin ngắn hàng ngày dành cho bạn
  • Từ lâu rồi suy nghĩ làm thế nào để tăng sự hiện diện thương hiệu, cũng như người dùng cho blog. Nghĩ đi nghĩ lại thì chỉ có cách chia sẻ lên mạng xã hội hoặc trông chờ họ tìm kiếm, cho đến khi...

    In cái áo này được cái tắc đường khỏi phải lăn tăn, càng đông càng vui vì hàng trăm con mắt nhìn thấy cơ mà 🤓

    (Có tác dụng thật nha 🤭)

    » Xem thêm
  • Một vòng của sự phát triển nhiều dự án khá là thú vị. Tóm tắt lại trong 3 bước: Thấy một cái gì đó phức tạp -> Làm cho nó đơn giản đi -> Thêm thắt tính năng cho đến khi nó phức tạp... -> Quay trở lại vòng lặp mới.

    Tại sao lại như vậy? Để mình lấy 2 ví dụ cho các bạn thấy.

    Markdown ra đời với mục tiêu tạo ra một định dạng văn bản thô "dễ viết, dễ đọc, dễ dàng chuyển thành một dạng gì đó như HTML". Vì thời đó chẳng ai đủ kiên nhẫn mà vừa ngồi viết vừa thêm định dạng cho văn bản hiển thị ở trên web như thế nào. Ấy vậy mà giờ đây người ta đang "nhồi nhét" hoặc tạo ra các biến thể dựa trên markdown để bổ sung thêm nhiều định dạng mới đến mức... chẳng nhớ nổi hết cú pháp.

    React cũng là một ví dụ. Từ thời PHP, việc khát khao tạo ra một cái gì đó tách biệt hẳn giao diện người dùng và phần xử lý logic chính của ứng dụng thành 2 phần riêng biệt cho dễ đọc, dễ viết. Kết quả là các thư viện UI/UX phát triển rất mạnh mẽ, mang lại khả năng tương tác với người dùng rất tốt, còn phần logic ứng dụng thì nằm ở một máy chủ riêng biệt. Bộ đôi Front-end, Back-end cũng từ đấy mà thịnh hành, không thể thiếu anh bồi bàn REST API. Ấy vậy mà giờ đây React trông cũng không khác biệt gì so với PHP là mấy, kéo theo là cả Vue, Svelte... lại cùng quy tất cả về một mối.

    Cơ mà không phải vòng lặp là xấu, ngược lại vòng lặp này mang tính tiến hoá nhiều hơn là "cải lùi". Nhiều khi lại tạo ra được cái hay hơi cái cũ thế là người ta lại dựa trên cái hay đó để tiếp tục lặp. Nói cách khác là chắc lọc tinh hoa từng tí một tí một á 😁

    » Xem thêm
  • Song song với các dự án chính thức thì thi thoảng mình vẫn thấy các dự án "bên lề" nhằm tối ưu hoặc cải tiến ngôn ngữ theo khía cạnh nào đó. Ví dụ nature-lang/nature là một dự án hướng tới cải tiến Go, mang lại một số thay đổi nhằm giúp cho việc sử dụng Go trở nên thân thiện hơn.

    Nhìn lại mới thấy hao hao JavaScript 😆

    » Xem thêm

Vấn đề

Node.js là một môi trường chạy mã JavaScript được kết hợp từ nhiều thành phần khác nhau. Trong một loạt bài viết về Kiến trúc Node.js - Giới thiệu về Node.js, chúng ta đã tìm hiểu về những thành phần và cả chức năng của nó.

Trong Node, có rất nhiều build-in modules - tức là các modules được tích hợp sẵn ngay từ đầu. Một trong số đó là util mà theo như tôi thấy đang chưa nhận được nhiều sự chú ý. Trong util là tập hợp các hàm tiện ích nho nhỏ có ích trong một số trường hợp. Bài viết ngày hôm nay chúng ta sẽ đi qua một số hàm có trong này nhé!

util.promisify và util.callbackify

callback là một trong những cách xử lý bất đồng bộ đời đầu. callback có nhiều hạn chế như khiến mã lồng vào nhau và gây ra tình trạng callback hell. Đôi lúc đọc một đoạn mã viết theo kiểu callback mà khiến mình như tẩu "hoả nhập ma". Muốn thêm một tính năng mới cũng khó vì như thế sẽ tạo thêm một lớp logic lồng sâu vào nhau thêm nữa.

Trong Node, có một hàm tiện ích giúp chuyển đổi các hàm xử lý bất đồng bộ theo kiểu callback về Promise. Sử dụng khi bạn muốn chuyển cách viết về Promise, sau đó kết hợp với async/await để mã trở nên gọn gàng, dễ theo dõi hơn.

const util = require('node:util');
const fs = require('node:fs');

const stat = util.promisify(fs.stat);

async function callStat() {
  const stats = await stat('.');
  console.log(`This directory is owned by ${stats.uid}`);
}

callStat(); 

Ngược lại với util.promisify, chúng ta có util.callbackify để chuyển ngược lại các hàm Promise về callback.

const util = require('node:util');

async function fn() {
  return 'hello world';
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
}); 

util.deprecate

Nếu hay sử dụng thư viện, đôi khi bạn sẽ thấy trong console in ra mấy dòng thông báo kiểu:

oldFunction() is deprecated. Use newFunction() instead.

Đây là thông báo về việc một hàm oldFunction sắp không còn được dùng nữa, rất có khả năng nó bị loại bỏ trong tương lai nên hãy sử dụng một hàm khác như newFunction để thay thế.

Đây là một cách rất phổ biến để nhắc nhở lập trình viên khi sử dụng một hàm sắp bị "khai tử". Trong Node có một cách đơn giản để hiển thị thông báo này nếu bạn cần cảnh báo đến người khác dùng một hàm sắp bị ngừng hỗ trợ.

const util = require('util');

function oldFunction() {
    console.log('This function is deprecated!');
}

const deprecatedFunction = util.deprecate(oldFunction, 'oldFunction() is deprecated. Use newFunction() instead.');

Chỉ cần "wrap" oldFunction vào trong util.deprecate. Mỗi khi gọi oldFunction, dòng thông báo sẽ hiện ra trong màn hình console.

util.types

Từ ES6, chúng ta đã có thêm nhiều hàm để kiểm tra kiểu dữ liệu là một boolean, một array, một object...

Trong thư viện util, có một thuộc tính types giúp mở rộng thêm khả năng kiểm tra loại dữ liệu.

Ví dụ:

console.log(util.types.isPromise(Promise.resolve())); // true
console.log(util.types.isRegExp(/abc/)); // true
console.log(util.types.isDate(new Date())); // true

Danh sách đầy đủ tại util.types | Node.js documentation.

util.isDeepStrictEqual

isDeepStrictEqual là cách nhanh nhất để so sánh 2 đối tượng có giống y hệt nhau hay không.

const util = require('util');

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };

console.log(util.isDeepStrictEqual(obj1, obj2)); // true

Ngoài ra, util còn cung cấp nhiều hàm tiện ích khác nữa như util.styleText để định dạng cho văn bản được in ra trong console; util.parseEnv giúp đọc nội dung của biến môi trường trong tệp .env thường gặp.

Tham khảo:

Cao cấp
Hello

Tôi & khao khát "chơi chữ"

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Bạn đã thử viết? Và rồi thất bại hoặc chưa ưng ý? Tại 2coffee.dev chúng tôi đã có quãng thời gian chật vật với công việc viết. Đừng nản chí, vì giờ đây chúng tôi đã có cách giúp bạn. Hãy bấm vào để trở thành hội viên ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...