Một năm trước đây tôi đã viết bài Làm cách nào để trở thành lập trình viên Node.js giỏi hơn trong năm 2016? và đã nhận được sự hưởng ứng của rất nhiều độc giả. Do đó bây giờ hẳn là một thời điểm tuyệt vời để làm mới nội dung cho năm 2017 này.

Trong bài viết này, chúng ta sẽ đi qua những nội dung quan trọng nhất của Node.js trong năm 2017, những topic mà bạn cần quan tâm và luyện tập.

Sử dụng ES2015

Năm ngoái chúng tôi đã khuyến nghị mọi người dùng ES2015, tuy nhiên từ đó đến nay đã có rất nhiều thay đổi.

Cùng nhìn lại thời điểm đó, Node.js v4 là phiên bản LTS, và nó chỉ hỗ trợ 57% chức năng của ES2015. Tuy nhiên qua 1 năm, con số đó đã gần như tối đa với phiên bản Node 6, 99%!

Nếu bạn đang sử dụng phiên bản Node LTS mới nhất, chúc mừng! Bạn sẽ không cần phải bận tâm đến babel để có thể sử dụng hết các chức năng của ES2015 nữa. Tuy nhiên ở phía client-side thì không đúng như thế nên bạn vẫn cần chú ý.

Để xem thêm về phiên bản Node.js hỗ trợ chức năng ES2015, tôi gợi ý bạn đọc hãy kiểm tra ở trang node.green.

Sử dụng Promises

Promises đã xuất hiện trong các miêu tả từ những năm của thập niên 80. Bây giờ nó là một phần trong các ngôn ngữ lập trình hiện đại, giúp cho công việc của các developer dễ chịu hơn.

Đoạn code ví dụ sau đọc 1 file, parse nội dung, sau đó in ra tên của package. Nếu sử dụng callback, nó sẽ trông như thế này:

fs.readFile('./package.json', 'utf-8', function (err, data) {  
  if (err) {
    return console.log(err)
  }

  try {
    JSON.parse(data)
  } catch (ex) {
    return console.log(ex)
  }
  console.log(data.name)
})

Không dễ để viết lại đoạn mã trên theo các cách khác dễ đọc hơn. Tuy nhiên, khi sử dụng Promises thì khác:

fs.readFileAsync('./package.json').then(JSON.parse).then((data) => {  
  console.log(data.name)
})
.catch((e) => {
  console.error('error reading/parsing file', e)
})

Cần chú ý rằng trong API fs không có hàm readFileAsync trả về 1 Promise. Bạn cần gói nó lại với một module, ví dụ promisifyAll.

Sử dụng cú pháp chuẩn Javascript

Khi nói đến phong cách code, việc quan trọng nhất chính là đặt ra quy tắc cho phong cách code, hay code style. Khi có code style cụ thể, việc thay đổi project sẽ trở nên rất dễ dàng, do code đã được chuẩn hóa theo cùng 1 cách thức.

Ở RisingStack, chúng tôi đã sử dụng Chuẩn cú pháp Javascript trong tất cả các dự án.

javascript

Bạn đọc có thể tìm hiểu thêm về các chuẩn ở đây.

Sử dụng Docker

Bạn có thể hình dung Docker images như một bản triển khai hoàn chỉnh. Docker containers gói tất cả các thành phần của phần mềm thành một hệ thống-file hoàn chỉnh, chứa tất cả mọi thứ cần để chạy: code, runtime, công cụ hệ thống, thư viện hệ thống,... mọi thứ bạn có thể cài đặt trên server!

Tại sao bạn nên bắt đầu sử dụng Docker?

  • Cho phép bạn chạy ứng dụng một cách độc lập.
  • Giúp cho việc triển khai ứng dụng bảo mật hơn.
  • Docker images nhẹ.
  • Cho phép triển khai bất biến.
  • Cho phép tạo môi trường phát triển song song trên máy cục bộ

Nếu bạn muốn bắt đầu với Docker, đây là một số tutorial hữu ích.

Tham khảo các khóa học lập trình online, onlab, và thực tập lập trình tại TechMaster

Giám sát ứng dụng của bạn

Nếu ứng dụng của bạn có vấn đề, người đầu tiên biết phải là bạn chứ không nên là khách hàng của bạn.

Để giám sát ứng dụng, một trong số những giải pháp open-source mới là Prometheus. Prometheus là một hệ thống open-source giám sát và thông báo các toolkit được build bởi SounCloud. Nhược điểm của nó là bạn phải tự cài đặt và host.

Nếu bạn đang tìm kiếm một giải pháp mới mẻ, Trace by RisingStack là một phương án tuyệt vời cho bạn. Nó giúp bạn:

  • Cảnh báo.
  • Ghi nhớ và định hình CPU trong hệ thống sản xuất.
  • Truy dấu phân tán và tìm kiếm lỗi.
  • Giám sát hiệu năng.
  • Giữ cho các gói npm được bảo mật.

trace

Sử dụng Messaging cho các tiến trình chạy nền

Nếu bạn sử dụng giao thức HTTP để gửi message, nếu service nhận message lỗi, toàn bộ message của bạn sẽ mất. Tuy nhiên nếu bạn sử dụng một lớp chuyển giao, như là message queue thì bạn sẽ tránh được vấn đề này.

Theo cách đó, nếu service nhận message lỗi, các message sẽ được giữ lại, sau đó có thể tiếp tục tiến trình. Nếu service ổn, nhưng lại có vấn đề khác xảy ra trong quá trình gửi, các tiến trình lúc này sẽ được chạy lại để không làm thất lạc dữ liệu.

Ví dụ thực tế: bạn cần gửi 1000 message. Bạn cần cung cấp địa chỉ email và tên, sau đó thêm nội dung email và gửi đi, không lo lắng gì nữa về việc email bị thất lạc.

Điều tuyệt vời nhất mà bạn nhận được khi sử dụng phương pháp messaging này là bạn có thể mở rộng nó bất cứ khi nào bạn muốn, hoàn toàn không làm thất thoát dữ liệu. Một vài cái tên tiêu biểu cho messaging queue:

Sử dụng phiên bản Node LTS mới nhất

Để đảm bảo được cung cấp đầy đủ các tính năng và sự ổn định nhất, chúng tôi khuyên bạn nên sử dụng phiên bản Node.js LTS mới nhất (Long-term Support).

Để dễ dàng chuyển đổi giữa các phiên bản Node.js, bạn có thể sử dụng nvm. Sau khi cài đặt, bạn có thể chuyển qua các bản LTS chỉ với 2 dòng code:

nvm install 6.9.2  
nvm use 6.9.2

Sử dụng Semantic versioning (phiên bản ngữ nghĩa)

Chúng tôi đã đưa ra một khảo sát lập trình viên Node.js vài tháng trước, nó cho phép chúng tôi hiểu thêm về cách mọi người sử dụng Semantic versioning.

Số liệu không khả quan cho lắm: chỉ 71% người tham gia khảo sát sử dụng Semantic versioning. Chúng tôi mong chờ rằng con số này phải cao hơn, nghĩa là tất cả mọi người nên dùng nó! Tại sao? Bởi vì cập nhật các gói mà không có Semantic versioning có thể dễ dàng phá hỏng ứng dụng của bạn.

do you use semantic ver

Quản lý phiên bản ứng dụng/module cần phải được đặt lên hàng đầu. Người sử dụng cần phải biết khi có module mới được phát hành và họ cần làm những gì để cập nhật phiên bản mới.

Đất diễn trở lại với Semantic versioning - con số phiên bản MAJOR.MINOR.PATCH:

  • MAJOR version khi thay đổi các API không tương thích.
  • MINOR version khi thêm các chức năng (nhưng không làm thay đổi các API).
  • PATCH version khi sửa lỗi.

npm cũng sử dụng Semantic versioning khi cài đặt các dependency của bạn, do đó khi phát hành module, luôn luôn đi kèm Semantic versioning.

Bảo mật ứng dụng của bạn 

Bảo mật dữ liệu người dùng là ưu tiên hàng đầu trong năm 2017. Trở lại với 2016, hàng triệu tài khoản người dùng đã bị bẻ khóa như là 1 hệ quả của việc bảo mật kém.

Để bắt đầu bảo mật ứng dụng Node.js, đọc danh sách sau. Nó bao gồm các topic:

  • Bảo mật HTTP Header.
  • Bảo vệ cưỡng chế.
  • Quản lý Session.
  • Các dependency không an toàn.
  • Xác thực dữ liệu.

Sau khi bạn đã bao quát được căn bản, xem thêm về Talk tương tác Node.js sau: Tồn tại trên thế giới bảo mật web với Node.js.

Học Serverless

Serverless khởi đầu với sự giới thiệu về AWS Lambda. Kể từ đó nó phát triển ngày càng nhanh chóng với cộng đồng open-source nhiệt tình.

Trong những năm kế, serverless sẽ trở thành nhân tố to lớn trong việc xây dựng các ứng dụng mới. Và bạn nên học nó từ bây giờ.

Một trong những giải pháp thông dụng nhất đó là Serverless Framework giúp triển khai các hàm AWS Lambda.

Tham gia và thảo luận ở các buổi hội thảo, các cuộc nói chuyện, cuộc gặp gỡ

Đây luôn là cách tuyệt vời để học hỏi về các xu hướng mới, các kinh nghiệm thực tế từ các chuyên gia hàng đầu trong giới công nghệ cũng như giao lưu với mọi người trong cộng đồng.

Một số các sự kiện mà tôi mong muốn các bạn tham gia, học hỏi.

Bài viết được dịch từ:  https://blog.risingstack.com/node-js-best-practices-2017/​