Node.js 19 đã phát hành các lập trình viên sẽ chú ý những tính năng nào?

Nội dung bài viết

Video học lập trình mỗi ngày

Nodejs 19 release

Những lập trình viên làm BackEnd sử dụng Nodejs làm core thì những động thái phát hành version mới của Node.js sẽ được quan tâm và tôi cũng không ngoại lệ. Trước đây tôi cũng đã đưa những tính năng mới nhất của Node v18 không thể bỏ qua, các bạn có thể xem lại nếu như muốn sử dụng.

Node.js gần đây đã công bố phát hành phiên bản 19. Phiên bản này có các tính năng sau:

  • node --watch(thực nghiệm)
  • KeepAlive theo mặc định
  • WebCrypto ổn định
  • Cập nhật V8 lên V10.1

Trong bài viết này, chúng ta sẽ khám phá những điểm nổi bật chính của phiên bản này. Chúng tôi khuyên bạn nên tải xuống bản phát hành Node.js 19 mới nhất để theo dõi. Hoặc các bạn có thể tham khảo 3 cách update phiên bản nodejs mới nhất trên macOS nếu như các bạn chưa biết.

Để xác minh phiên bản Node.js của bạn:

> node --version

Bắt đầu nào!

node --watch(Experimental)

Tính năng mới thú vị này thêm trình xem tệp bằng --watchtùy chọn. Chạy ứng dụng Node.js ở chế độ đồng hồ sẽ tự động khởi động lại quy trình khi tệp đã nhập thay đổi.

Để kiểm tra tính năng mới này, hãy tạo hai tệp: index.jsmessage.js. Tính năng này chỉ hoạt động với Node.js v19.0.0 và v18.11.0+.

Trong message.jstệp ghi:

module.exports  =  {
    message:  (  msg  )  =>  {
        return  `Xin chao::${msg}`
    }
}

Sau đó, trong index.jstệp:

const  {
message
}  =  require('./message')
console.log(message('Anonystick'))

Bây giờ hãy chạy:

> node --watch index.js

Công cụ sẽ xuất ra rằng nó đang chạy ở chế độ watch, anh em nào hay xài pm2 thì quá rõ. Hãy nhớ rằng đây là một tính năng thử nghiệm nên nó có thể thay đổi bất cứ lúc nào.

Cập nhật imdex.jstệp nhanh chóng bằng cách thay đổi message:

module.exports  =  {
    message:  (  msg  )  =>  {
        return  `hello::${msg}`
    }
}

Lưu ý quá trình khởi động lại và thông báo mới hiện xuất hiện trên bảng điều khiển. Khả năng ở đây là vô tận, vì bạn có thể tập trung hơn vào mã của mình mà không phải lo lắng về quy trình đang chạy.

Đối với phần còn lại của bài đăng này, hãy nodetự chạy tệp thực thi. Thao tác này sẽ tải REPL mà chúng tôi có thể sử dụng để kiểm tra phần còn lại của các tính năng mới.

node

HTTP(S)/1.1 keepAlivetheo Mặc định

Với bản phát hành này, Node.js đặt keepAlivetiêu đề theo mặc định và thời lượng được đặt thành 5 giây. Điều này sử dụng lại các kết nối HTTP(S) 1.1, tăng thông lượng vì tiêu đề hướng dẫn máy khách về thời gian duy trì kết nối. Máy chủ cũng sẽ tự động ngắt mọi kết nối nhàn rỗi khi close()được gọi.

Keep-Alive là gì?

Tôi biết nói về đinh nghĩa Keep-Alive thì sẽ có nhiều Anh Chị ở đây chưa nghe đến hay đã nghe mà không hiểu về khái niệm này. Một BE mà không hiểu khái niệm này thì hơi tiếc, cho nên xin phép nói đây luôn.

Giao thức HTTP áp dụng chế độ "response và request". Khi chế độ KeepAlive không được bật, mỗi máy khách và máy chủ req/res phải tạo kết nối mới và ngắt kết nối ngay sau khi hoàn thành (giao thức HTTP là giao thức không kết nối); khi được bật Trong Chế độ Keep-Alive (còn gọi là kết nối liên tục, tái sử dụng kết nối), chức năng Keep-Alive giúp kết nối từ máy khách đến máy chủ được liên tục hợp lệ. Khi có yêu cầu tiếp theo đến máy chủ, chức năng Keep-Alive sẽ tránh thiết lập hoặc thiết lập lại kết nối. Từ đó Response Time giảm nâng cao mượt mà cho hệ thống ứng dụng.

Để kiểm tra tính năng mới này, hãy tạo một máy chủ HTTP:

const http = require("http");

const requestListener = function (req, res) {
  res.writeHead(200);
  res.end("Hello, Anonystick!");
};

const server = http.createServer(requestListener);
server.listen(8080);

Bạn có thể sao chép-dán mã này vào REPL hoặc nhập tất cả. Khi máy chủ đang chạy, hãy chạy lệnh CURL:

> curl -i http://localhost:8080

Lưu ý tiêu đề trên phản hồi - Keep-Alive: timeout=5. Điều này hướng dẫn khách hàng sử dụng lại các kết nối và giữ chúng mở trong 5 giây.

API tiền điện tử web ổn định

Web Crypto API hiện đã ổn định. Bạn có thể truy cập module này qua globalThis.cryptohoặc require('node:crypto').

Để kiểm tra Web Crypto API, hãy thử mã hóa - sau đó giải mã - một tin nhắn bí mật:

const  crypto  =  globalThis.crypto;
const  {  subtle  }  =  globalThis.crypto;

async  function  generateAesKey(length  =  256)  {
    const  key  =  await  subtle.generateKey({
    name:  'AES-CBC',
    length
    },  true,  ['encrypt',  'decrypt']);
    return  key;
}

async  function  aesEncrypt(plaintext)  {
    const  ec  =  new  TextEncoder();
    const  key  =  await  generateAesKey();
    const  iv  =  crypto.getRandomValues(new  Uint8Array(16));
    const  ciphertext  =  await  crypto.subtle.encrypt({
        name:  'AES-CBC',
        iv,
    },  key,  ec.encode(plaintext));

    return  {
        key,
        iv,
        ciphertext
    };
}

async  function  aesDecrypt(ciphertext,  key,  iv)  {
    const  dec  =  new  TextDecoder();
    const  plaintext  =  await  crypto.subtle.decrypt({
        name:  'AES-CBC',
        iv,
    },  key,  ciphertext);
    return  dec.decode(plaintext);
}

async  function  message(  msg  ){
    const  {key,  iv,  ciphertext}  =  await  aesEncrypt(msg)
    console.log(`encrypt::`,  ciphertext)
    console.log(await  aesDecrypt(ciphertext,  key,  iv))
}

message(  'Tipjs ');

Bạn cũng có thể sử dụng cùng API này để tạo khóa đối xứng và khóa bất đối xứng (khóa chung và khóa riêng) cho các nhu cầu bảo mật cụ thể của mình. Xin lưu ý rằng các thuật toán Ed25519/Ed448/X25519/X448 vẫn đang trong giai đoạn thử nghiệm.

Bản cập nhật V8 Engine 10.7 với Intl.NumberFormatAPI JavaScript

Công cụ V8 đã được nâng cấp lên phiên bản 10.7, là một phần của Chromium 107. Phiên bản này bao gồm API JavaScript mới: Intl.NumberFormat.

API JavaScript này cho phép định dạng số theo ngôn ngữ.

const number = 123456.789;

const  vietnam  =  new  Intl.NumberFormat("vi-VN",  {
    style:  "currency",
    currency:  "VND",
});
console.log(vietnam.format(number));  //123.457 ₫

const us = new Int.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
});
console.log(us.format(number)); //$123,456.79

Đối Intl.NumberFormattượng có một danh sách dài các tùy chọn để hỗ trợ định dạng số quốc tế .

Tham khảo thêm ở: appsignal

Có thể bạn đã bị missing