KiemTienOnline360

Chia sẻ hành trình kiếm tiền online bắt đầu từ con số 0

Kiến thức lập trình, Kỹ nghệ phần mềm

Lập trình NodeJs: Hướng dẫn cài đặt NodeJs -NPM – NVM-PM2, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế

Lập trình NodeJs: Hướng dẫn cài đặt, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế

Lập trình NodeJs: Hướng dẫn cài đặt, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế

Chia sẻ bài viết
5
(8)

Mình là dân lập trình và đầu tư cũng là mảng mình đang theo đuổi. Bài viết này với mục đích tổng hợp lại kiến thức và kinh nghiệm của mình liên quan tới NodeJs: Hướng dẫn cài đặt, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế. Nó như bản lưu lại để tiện cho quá trình tra cứu tham khảo về sau.

Lập trình NodeJs: Hướng dẫn cài đặt, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế
Lập trình NodeJs: Hướng dẫn cài đặt, thư viện hay dùng, xử lý lỗi và kinh nghiệm thực tế

NodeJS là một nền tảng được xây dựng trên V8 JavaScript Engine – trình thông dịch thực thi mã JavaScript, giúp xây dựng các ứng dụng web một cách đơn giản và dễ dàng mở rộng. NodeJS được phát triển bởi Ryan Dahl vào năm 2009 và có thể chạy trên nhiều hệ điều hành khác nhau: OS X, Microsoft Windows, Linux.

Theo khảo sát của Stack Overflow về các framework, nền tảng được sử dụng nhiều nhất năm 2019, NodeJS đã giành vị trí số 1 với số lượng người dùng lên đến gần 50%. Điều đó cho thấy nếu học NodeJS, cơ hội việc làm của bạn sẽ vô cùng rộng mở.

Nếu bạn muốn đi sâu lập trình NodeJs, bạn có thể tham khảo các cuốn sách sau:

Hướng dẫn cài đặt và sử dụng

Ngoài việc hướng dẫn cài đặt NodeJs, mình cũng hướng dẫn cài đặt NPM (Công cụ quản lý gói thư viện sử dụng trong NodeJs)và PM2 (Một tiện ích quản lý các process của NodeJs).

Cài đặt NodeJs

Trên Windows

Có nhiều cách cài đặt, ở đây mình giới thiệu 2 cách thông dụng nhất:

* Cài đặt thông qua NVM:

NVM (Node Version Manager) là tiện ích giúp quản lý nhiều phiên bản NodeJs trên 1 máy. Rất tiện lợi cho các máy của Developer vì trong quá trình lập trình, họ phải làm việc với nhiều project khác nhau, mỗi project khác nhau có thể sử dụng phiên bản NodeJs khác nhau. Với các DEV mình khuyến khích nên sử dụng theo cách này. Chi tiết xem tại: NVM là gì? Cài đặt nvm trên windows (Node.js)

Nói chung bạn chỉ việc vào địa chỉ https://github.com/coreybutler/nvm-windows/releases, tải bản mới nhất về cài đặt.

* Cài đặt trực tiếp:

Nếu ai không có như cầu sử dụng nhiều phiên bản, thì có thể dùng cách này. Tải trực tiếp phiên bản mới nhất trên Windows về để cài đặt: https://nodejs.org/en/download/

Trên Ubuntu

Có nhiều cách cài đặt, ở đây mình giới thiệu 2 cách thông dụng nhất:

* Cài đặt thông qua NVM:

NVM giúp quản lý nhiều phiên bản NodeJs trên máy nên khuyến khích DEV sử dụng theo cách này. Chi tiết xem: Hướng dẫn cài đặt nvm trên Ubuntu

Đầu tiên bạn tải NVM bằng lệnh:

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

Sau khi chạy sau lệnh trên, đoạn cuối có hướng dẫn yêu cầu chạy mấy lệnh để cấu hình (2 đến ba lệnh tùy phiên bản). Bạn chạy các lệnh này là xong nhé. Sau đó kiểm tra xem cài đặt okie chưa bằng lệnh:

 nvm --version 

Lệnh sử dụng NVM giống như trên Windows (Tham khảo phần trên).

Ngoài NVM bạn có thể tham khảo thêm tiện ích tương tự: NodeNv

* Cài đặt trực tiếp:

Thường sử dụng để cài đặt trên server vì thường mỗi server chạy cho 1 project nào đó, gần như không có nhu cầu cài nhiều phiên bản. Mặt khác NVM quản lý các phiên bản NodeJs cho từng user, chứ không sử dụng chung cho các user được. Với server điều này là bất tiện vì thường user root sẽ cài tất cả các phần mềm cần thiết cho các user khác.

Lệnh cài đặt như dưới. Bạn có thể thay đổi phiên bản tùy theo yêu cầu.

Ví dụ cho phiên bản 8:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

Ví dụ cho phiên bản 14:

curl -sL  https://deb.nodesource.com/setup_14.x  | sudo -E bash -
sudo apt-get install -y nodejs

Sau khi cài đặt xong, dùng lệnh sau để kiểm tra:

node -v

Ghi chú: Trong một số trường hợp (Thường phiên bản cũ), sau khi cài đặt chỉ có file nodejs mà không có file node thì bạn dùng lệnh sau để tạo:

sudo ln -s /usr/bin/nodejs /usr/bin/node

Cài đặt NPM

NPM đã được tích hợp sẵn khi cài NodeJs nên bạn không cần phải cài đặt mà bạn chỉ cần biết cách sử dụng thôi. Bạn có thể check bằng lệnh:

npm -v

Sự dụng các lệnh NPM để cài đặt các gói. Tham khảo: An introduction to the npm package manager

# Cài đặt thư viện
npm install <package>

# Cài đặt thư viện ở chế độ 

# Cài đặt thư viện ở phiên bản xác định
npm install <package>@<version>
 
npm remove <package>
npm 

Cài đặt PM2

PM2 là phần mềm quản lý các ứng dụng NodeJS (Advanced, production process manager for Node.js). Phần mềm này có nhiều tính năng, còn cho phép giám sát từ xa, nhưng đòi hỏi phải trả tiền. Nói chung, chúng ta chỉ cần dùng tính năng free của nó là đủ rồi.

Yêu cầu bạn phải cài NodeJS trước. Sau đó đánh lệnh sau để cài đặt:

sudo npm install pm2 -g

Sau khi hoàn thành thực hiện kiểm tra version:

pm2 -v

Hướng dẫn sử dụng

Sử dụng NVM

Sau khi cài đặt sau bạn sử dụng các lệnh của NVM để quản lý các phiên bản NodeJs. Các lệnh này giống nhau trên mọi hệ điều hành.

Cách lệnh hay dùng như sau:

// to list available remote versions of node (via nvm)
nvm ls-remote

// check version
node -v || node --version

// To list available remote versions on Windows 10 you can type
nvm list available

// list installed versions of node (via nvm)
nvm ls

// install specific version of node
nvm install 6.9.2

// set default version of node
nvm alias default 6.9.2

// switch version of node
nvm use 6.9.1

// uninstall specific version of node
nvm uninstall 6.9.2

Sử dụng NodeJs

Để start một ứng dụng trên NodeJs ta thường dùng lệnh sau:

node app.js

Đây là cách DEV hay dùng cho nhanh, nhưng có bất tiện mỗi khi sửa code liên quan tới ứng dụng thì bạn phải chạy lại lệnh này.

Trên NodeJs có thư viện nodemon, bạn chỉ cần chạy lệnh sau:

 nodemon app.js

Mỗi khi tệp source code bất kỳ trong thư mục hiện tại hoặc các thư mục con thay đổi, nodemon sẽ tự động chạy lại ứng dụng. Chính bởi sự tiện lợi này mà thư viện nodemon được sử dụng rất nhiều.

Sử dụng npm

Các bạn đã dùng NodeJs chắc đều biết rõ cách lệnh này. Mình list lại các lệnh thông dụng, nhiều khi lâu không dùng có thể bị quên:

// list installed modules
npm ls

// install local package
npm i <package>
npm install <package> 

// install global package
npm i -g <package>
npm install -g <package> 

// uninstall local package
npm un <package>
npm uninstall <package> 

// npm update packages
npm up <package>
npm update <package>

// check package version
npm view <package> version

Chi tiết bạn xem thêm tại: A Beginner’s Guide to npm, the Node Package Manager

Sử dụng PM2

Khi chạy ứng dụng NodeJs trên server hoặc VPS, thường sử dụng PM2 để tiện cho việc quản lý các ứng dụng Node. Dưới đây là danh sách các lệnh hay dùng trên PM2:

// Start the app
pm2 start app.js

// Start the app with name
pm2 start app.js --name app_test

// Start the app with name and arguments (Add any arguments after --)
 pm2 start app.js --name=app_test -- --type=checkdata

// Monitoring apps
pm2 monit

// List apps
pm2 list

// Restart the app
pm2 restart <id>
pm2 restart <app_name>
pm2 restart 0
pm2 restart app_test

// Stop the app
pm2 stop <id>
pm2 stop <app_name>
pm2 stop 0
pm2 stop app_test

// Delete the app
pm2 delete <id>
pm2 delete <app_name>
pm2 delete 0
pm2 delete

Đặc biệt, PM2 còn cho phép start nhiều process với nhiều tham số cấu hình hơn. PM2 không chỉ quản lý được ứng dụng nodejs mà có thể quản lý ứng dụng C/C++ (Qua Shell Script), các shell script,…

Ví dụ bạn tạo tệp apps.config.js với nội dung như sau:

module.exports = {
     apps : [
         {
             name                    : 'app-01',
             cwd                     : './app_core/',
             script                  : 'PM2run.sh',
             args                    : 'app-01.ini',
             max_memory_restart      : '200M',
             exec_intepreter         : 'bash',
             exec_mode               : 'fork_mode',
             autorestart             : true,
             restart_delay           : 3000
         },
         {
             name                    : "app-02",
             script                  : "./app.js",
             max_memory_restart      : '2000M',
             autorestart             : true,
             restart_delay           : 3000
         },
         {
             name                    : "app-03",
             cwd                     : "./app_test/",
             script                  : "main.js",
             env: {
                 "NODE_ENV":         "app-03"
             },
             autorestart             : true,
             restart_delay           : 3000
         },
         {
             name: 'app-04',
             script: "./main.js",
             cwd: "./gateway/",
             max_memory_restart: '2000M',
             autorestart: true,
             restart_delay: 1000,
             instance_var: 'INSTANCE_ID',
             env: {
                 "NODE_ENV": "app-04"
             }
         }
     ]
 }

Khi đó bạn chỉ cần đánh lệnh sau:

pm2 start apps.config.js
pm2 stop apps.config.js
pm2 delete apps.config.js

Nói qua một số tham số cấu hình cho các process:

  • name: Đặt tên cho process trên PM2
  • cwd: Trong trường hợp bạn cần chuyển đến một thư mục nào đó trước khi start process thì mới cần khai báo tham số này.
  • script: Lệnh thực hiện
  • args: Tham số truyền vào
  • max_memory_restart: Có thể không thiết lập. Khi được thiết lập, nếu RAM của process vượt quá giá trị này, PM2 sẽ tự động restart process này.
  • exec_intepreter: Với ứng dụng NodeJs thì ko cần tham số này. Nhưng để chạy Shell Script sau thì phải sử dụng với giá trị bash.
  • exec_mode: Với ứng dụng NodeJs thì không cần tham số này. Nhưng để chạy Shell Script sau thì phải sử dụng với giá trị fork_mode.
  • autorestart: Nếu tham số này được thiết lập true, bất cứ khi nào ứng dụng chết (Do crash, exception, ai đó kill,…), PM2 sẽ tự động restart lại.
  • restart_delay: Ứng dụng sẽ chờ thêm một khoảng thời gian trước khi restart lại.
  • env: Thiết lập thêm biến môi trường
  • instance_var: Xem thêm tại http://pm2.keymetrics.io/docs/usage/environment/

Các thư viện hay dùng trên NodeJs

Nếu bạn mới bắt đầu NodeJs bạn nên tham khảo trang Node.js Tutorial. Nó giúp bạn có sử dụng NodeJs cơ bản:

  • Cách tạo và sử dụng module
  • Biết cách sử dụng module cơ bản: HTTP Module, File System, URL Module, NPM, Events, Email, Upload Files
  • Biết cách kết nối tới Database thông dụng như MySQLMongoDB.
  • Sử dụng NodeJs làm nhiều thứ với Raspberry Pi

Thư viện trên NodeJs rất là phong phú, hầu như bạn cần gì cũng có.

  • Nhóm thư viện cơ bản:
    • windows-build-tools: Thư viện cần phải cài đầu tiên khi bạn chạy NodeJs trên Windows. Vì nhiều thư viện trên NodeJs phải build, do đó cần cài đặt bộ công cụ này (Nhớ cài đặt ở quyền Administrator):
      npm install –global windows-build-tools
    • underscore: Một thư viện chứa tất cả các hàm cơ bản hay được sử dụng nhất.
    • bignumber.js: Thư viện thao tác với số lớn, hay dùng khi làm việc với Smart Contract. Cách dùng tham khảo: https://ethereumdev.io/how-to-deal-with-big-numbers-in-javascript/
    • omit-empty: Là thư viện có nhiệm vụ chỉ lấy giá trị tồn tại và đồng thời có giá trị. Nó giúp bạn giảm thiểu phải check quá nhiều khi thao tác dữ liệu.
    • p-queue: Khi bạn dùng Promise.all sẽ gặp vấn đề khi số lượng Promise quá nhiều. Khi đó thư viện p-queue là một giải pháp hiệu quả vì nó có cấu hình giúp bạn thiết lập số tác vụ đồng thời.
  • Nhóm thư viện hỗ trợ parse dữ liệu, sinh dữ liệu, tạo tool tự đông:
    • axios: Thư viện sử dụng rất nhiều với 14 triệu download hàng tuần. Mình sử dụng thư viện này khá nhiều và đã gặp vấn đề lỗi: “Thỉnh thoảng job bị dừng không thấy chạy tiếp” => Nguyên nhân là do axios mặc định không có timeout, nên trong một số trường hợp đặc biệt server bị lỗi không trả về response thì request cứ chờ mãi ở đó, làm job không chạy tiếp được => Nhớ sử dụng timeout cho các request. Mình đã gặp vấn đề này khi kết nối tới Binance API.
    • compression: Thư viện hỗ trợ nén response trả về => Nếu website của bạn chủ yếu trả về dữ liệu text thì thư viện giúp giúp cải tiến hiệu năng lên rất nhiều.
    • node-html-parser: Một thư viện hỗ trợ parse HTML được sử dụng khá nhiều với hàng triệu download/tuần.
    • cheerio: Dùng để tạo các trình thu thập dữ liệu. Thư viện thay thế: jsdom
    • faker: Thư viện hỗ trợ tạo một lượng lớn dữ liệu giả trong trình duyệt và node.js. Tham khảo: https://viblo.asia/p/seeder-va-faker-de-tao-du-lieu-mau-cho-mongodb-nodejs-YWOZryANKQ0
    • puppeteer: Thư viện NodeJs cung cấp API mức cao để thao tác với dữ liệu Web trên Chrome và Chromium. Rất hữu ích để tạo tool test ứng dụng web hoặc tạo công cụ tự động.
  • Nhóm thư viện hỗ trợ quản lý Job:
    • Agenda: Một thư viện nhỏ gọn để quản lý các job, giảm rất nhiều công sức nếu bạn tự quản lý job. Agenda sử dụng MongoDB làm CSDL. Nó còn hỗ trợ giao diện kiểm tra và quản lý job thông qua agendash. Một số vấn đề cần chú ý:
      • Mặc dù thiết lập job 1 giây chạy 1 lần, nhưng thực tế thì 5s mới thấy job chạy 1 lần => Do mặc định agenda xử lý theo chu kỳ 5s (Xem: Agenda runs agenda.every(“0.1 seconds”, “job1”) every 5 seconds), để job có thể chạy với chu kỳ 1s thì khi khởi tạo cần thêm cấu hình processEvery:
        let agenda = new Agenda( { processEvery: “1 seconds” });
      • Mỗi lần restart lại ứng dụng, các job phải chờ mất 10 phút mới chạy lại => Đây cũng là một cấu hình mặc định của agenda, để giảm thời gian chờ đợi này bạn có thể sử dụng thệm lệnh:
        agenda.defaultLockLifetime(5000);
  • Nhóm thư viện với HTTP và Net:
    • express: Thư viện HTTP server nhẹ, dễ dùng và được sử dụng rất nhiều. Có lựa chọn thay thế khác như: Koa, Hapi, Meteor
    • socket.io: Thư viện hỗ trợ trao đổi dữ liệu hai chiều thời gian thực giữa client và server. Đây là thư viện được sử dụng khá nhiều.
    • nodemailer: Thư viện hỗ trợ gửi email trên NodeJs. Lựa chọn thay thế: sendmail, emailjs
    • morgan: Một thư viện middleware hỗ trợ lưu log các request HTTP. Thư viện thực sự rất hữu ích hỗ trợ nhiều trong việc debug ứng dụng web. Tham khảo: https://anonystick.com/blog-developer/3-middleware-huu-ich-khi-su-dung-express-rest-api-2019112318055877
    • camelcase-keys: Một middleware hỗ trợ convert dữ liệu trên form trước khi tới backend.
    • http-errors: Hỗ trợ tạo HTTP Error.
  • Nhóm thư viện cho Unit Test:

NodeJs Full Stack

Là các bộ công cụ đầy đủ xây dựng ứng dụng NodeJs từ Backend, Frontend, Database được cấu hình từ NodeJs. Các bộ Full Stack hiện có gồm:

Việc dùng cái nào thì phụ thuộc bạn thành thạo Angular hay ReactJs hơn. Nếu bạn muốn biết chi tiết hơn sự khác nhau, hãy tham khảo: Difference between MEAN Stack and MERN Stack

Các frontend framework

Hầu hết các frontent framework đều là javascript nên xin liệt kê luôn vào đây. Có hai loại:

Các công cụ hỗ trợ lập trình NodeJs

ESLint

Đang cập nhật…

Có thể bạn quan tâm: Kiến thức lập trình

Nguồn: Sưu tầm

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 8

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén