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 địnhWebCrypto
ổ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 --watch
tù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.js
và message.js
. Tính năng này chỉ hoạt động với Node.js v19.0.0 và v18.11.0+.
Trong message.js
tệp ghi:
module.exports = {
message: ( msg ) => {
return `Xin chao::${msg}`
}
}
Sau đó, trong index.js
tệ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.js
tệ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 node
tự 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 keepAlive
theo Mặc định
Với bản phát hành này, Node.js đặt keepAlive
tiê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.crypto
hoặ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.NumberFormat
API 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.NumberFormat
tượ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