Nodemon là gì

Đa số mình phần mềm sẽ cài đặt trên MacOS.

Cài đặt NodeJS: https://nodejs.org/en/download/

Kiểm tra phiên bản NodeJS: node -v

Nodemon là gì

Phiên bản hiện tại node ở máy 15.12.0

Kiểm tra NPM (node package manager) : npm -v

Nodemon là gì

Cài đặt Express:

Khởi tạo : npm init

package name: (test)
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)

Câu lệnh cài đặt: npm install express

package.json : quản lý thư viện phụ thuộc của project , package-lock.json quản lý thư viện phụ thuộc của phụ thuộc …

Cài đặt Nodemon: Thay đổi mà cần ko chạy lại lệnh

npm install –save-dev nodemon (Để save nodemon vào package.json cho việc dev)

Cài đặt Morgan: Để xem log của request gửi bao gồm http status, trình duyệt, ip của request. var morgan = require(‘morgan’) app.use(morgan(‘combined’))

Phát triển Node.js thì cực kỳ thú vị và vui. Có hơn 35 ngàn mô-đun để lựa chọn và nhìn chung node rất dễ dàng để phát triển một ứng dụng hoạt động mà có thể mở rộng dễ dàng. Tuy nhiên, đối với các lập trình viên chỉ mới bắt đầu với việc phát triển Node.js, sẽ có một vài sự cố xảy ra. Trong bài mẹo Node.js này, tôi đề cập đến một vài điều tôi đã hỏi và gặp phải khi học Node.js.

Nodemon là gì

Mẹo 1: Sử dụng nodemon cho development. pm2 cho production.

Khi bạn lần đầu tiên bắt đầu với Node.js, một trong những điều sẽ xảy ra là phải chạy node [file].js nhiều lần. Khi tôi bắt đầu với node, điều này cực kỳ là khó chịu. Đặc biệt là phải kiểm soát C mỗi khi tôi sửa đổi một cái gì đó.

May mắn thay, tôi đã phát hiện ra một công cụ tuyệt vời có tên là Nodemon https://github.com/remy/nodemon. Cài đặt nó bằng cách chạy npm install -g nodemon.

Nodemon là một công cụ tuyệt vời, một khi bạn cài đặt nó, bạn có thể chạy các tập lệnh node.js của mình thông qua nodemon [file].js. Làm như vậy sẽ báo cho nodemon để theo dõi tập lệnh của bạn và tất cả các tập lệnh mà nó phụ thuộc khi có thay đổi. Đây là một cách tuyệt vời để phát triển Node.js và tăng tốc mọi thứ.

Còn production thì sao? Trừ khi bạn đang sử dụng Heroku, Nodejitsu hoặc các nhà cung cấp dịch vụ lưu trữ Node.js tuyệt vời khác, rất có thể bạn sẽ sử dụng EC2 hoặc nhà cung cấp đám mây khác để chạy ứng dụng Node.js. Làm cách nào để bạn khởi động đúng ứng dụng Node.js để đảm bảo nó luôn chạy?

Câu trả lời cho câu hỏi đó là một công cụ tuyệt vời có tên PM2 https://github.com/Unitech/pm2. PM2 là một công cụ như nodemon nhằm chạy ứng dụng node của bạn trong production. Giống như Nodemon, nó sẽ theo dõi ứng dụng của bạn khi có thay đổi và deploy lại chúng, nhưng không giống như Nodemon, nếu PM2 gặp sự cố, nó sẽ khởi động lại ứng dụng node.js của bạn ngay lập tức.

Trong đó PM2 vượt trội là khi bạn cần mở rộng ứng dụng của mình thành nhiều lõi. PM2 đi kèm với một bộ “load balancer” tích hợp cho phép bạn dễ dàng chỉ định số lượng instance Node của bạn sẽ chạy.

pm2 bắt đầu app.js -i max

Các tham số -i cho phép bạn chỉ định số lượng instance sẽ chạy, trong trường hợp này PM2 đi kèm với một hằng số tích hợp được gọi là max, tự động chia tỷ lệ ứng dụng của bạn chạy trên số lượng các lõi bạn có. Hãy nhớ rằng Node chỉ chạy trên một lõi!

Mẹo 2: Async hoặc Q

Bạn càng bắt đầu viết các ứng dụng node.js, bạn sẽ càng sớm nhận ra vấn đề của callback. Nếu bạn không biết callback là gì, đây là một ví dụ:

Nodemon là gì

Mặc dù không phải là một đoạn code rất hữu ích hoặc tuyệt vời, nhưng nó sẽ giải thích được vấn đề callback là một điều rất thực tế. Nhưng làm thế nào để bạn tránh điều này?

Một cách đơn giản là sử dụng các event. Cá nhân tôi không thích sử dụng các event bởi vì sau đó bạn đang sử dụng các event để gọi các private function chỉ có một mục đích duy nhất, điều này trái ngược với chức năng của một function.

Làm thế nào để bạn làm điều này sau đó? Có hai thư viện là async.js và Q. Cả hai đều tự đưa ra cách ngăn chặn vấn đề callback.

Async.js https://github.com/caolan/async hoặc “async”, cho phép bạn dễ dàng thực hiện các chức năng theo chuỗi hoặc song song mà không cần lồng chúng trở lại.

Dưới đây là một số mẫu mà Async hỗ trợ lấy từ readme của nó. Để biết danh sách tất cả các mẫu async hỗ trợ, hãy kiểm tra repo.

Nodemon là gì

Nếu chúng ta lấy những gì chúng ta đã làm trước đây với register, chúng ta có thể áp dụng mô hình waterfall trong async. Kết quả của việc này là một đoạn code rất dễ đọc.

Một thư viện tuyệt vời khác là Q https://github.com/kriskowal/q . Thư viện này là chứa khái niệm về promise. Một promise về cơ bản là một đối tượng được trả về từ một phương thức với promise mà cuối cùng nó sẽ cung cấp giá trị trả về. Mối quan hệ này rất gọn gàng với bản chất không đồng bộ của javascript và node.js.

Ví dụ: lấy từ trang repo của Q.

Nodemon là gì

Hàm promise me trả về một đối tượng ngay lập tức. Gọi then trên đối tượng sẽ gọi function bạn truyền vào với giá trị bạn muốn trả về. Sau đó, cũng có một callback bổ sung được chạy khi đối tượng không trả về giá trị.

Đây là một cách rất gọn gàng để tránh vấn đề của callback. Nếu chúng tôi lấy ví dụ là registration, bạn có thể dễ dàng thực hiện để mỗi function đó được gọi khi được thực thi.

Nodemon là gì

Như tôi đã nói trước đây, tôi không thích tạo các function một mục đích. Thay vì truyền tên function cho “then”, tôi sẽ chỉ tạo một inner function ẩn danh và chuyển vào đó, tuy nhiên lựa chọn là của bạn.

Tóm lại, nếu bạn bắt đầu nhận ra mình đang tạo ra vấn đề của callback thì đã đến lúc xem xét async.js hoặc Q.

Mẹo 3: Debug ứng dụng Node.js dễ dàng

Việc debug các ứng dụng Node.js sẽ gây nhầm lẫn nếu bạn đến từ một ngôn ngữ có tích hợp IDE nặng như Java hoặc C#. Hầu hết các lập trình viên node mới đều áp dụng mô hình debug theo flow, nơi người bạn thân nhất của bạn là console.log.

Tuy nhiên, vẫn có những lựa chọn thay thế được quy ước nhiều hơn để debug. Node.js đi kèm với trình debug tích hợp mà bạn có thể chạy bằng cách gọi node debug, tuy nhiên, cái tôi yêu thích là trình node-inspector.

Lấy từ github repo, Node Inspector là một giao diện gỡ lỗi cho node.js bằng cách sử dụng Blink Developer Tools (WebKit Web Inspector trước đây).

Tóm lại, node-inspector cho phép bạn debug các ứng dụng của mình bằng bất kỳ trình soạn thảo nào bạn chọn và các công cụ web chrome. Thật là tiện lợi.

Node-inspector cho phép bạn thực hiện một số điều thực sự thú vị như thay đổi code trực tiếp, debug từng bước, scope injection và các nội dung thú vị khác.

Nó cần phải được thiết lập đúng, vì vậy bạn hãy làm theo hướng dẫn tại

https://github.com/node-inspector/node-inspector

Mẹo 4: Nodefly

Khi bạn khởi động và chạy ứng dụng, bạn có thể tự hỏi làm thế nào bạn có thể theo dõi hiệu suất của nó và lập hồ sơ để đảm bảo ứng dụng của bạn đang chạy ở tốc độ tối ưu. Câu trả lời đơn giản nhất đó là một dịch vụ tuyệt vời mà tôi sử dụng có tên là Nodefly.

Nodefly với một dòng code đơn giản sẽ bắt đầu theo dõi ứng dụng của bạn về memory leak, đo thời gian cần thiết để redis, mongo queries và một loạt các nội dung thú vị khác.

http://www.nodefly.com

Mẹo 5: Quản lý module với NPM

Một trong những điều phổ biến nhất để làm trong node là cài đặt các package thông qua NPM. Node có một trình quản lý package tuyệt vời để cài đặt tất cả các module được chỉ định trong tệp kê khai package.json của bạn. Tuy nhiên, một điều mà tất cả những người mới bắt đầu gặp phải là giữ cho tệp package.json này được cập nhật với tất cả các module bạn đang sử dụng.

Có vẻ như thật khó khăn khi luôn phải mở package.json để cập nhật dependencies property với module mới mà bạn vừa cài đặt, nhưng điều mà nhiều người không biết là npm sẽ làm điều này cho bạn!

Đơn giản hãy chạy npm install — save module_name và npm sẽ tự động cập nhật package.json của bạn với module và tên phiên bản chính xác. npm install —save module_name

Mẹo 6: Đừng check in thư mục node_modules của bạn

Mặc dù chúng tôi đang ở chủ đề về các module và npm, nhưng không nhiều người biết rằng bạn không nên check in thư mục node_modules của mình. Lý do lớn nhất đằng sau điều này là bạn không cần phải check in thư mục này. Bất cứ khi nào ai đó check out code của bạn, họ có thể chạy npm install và tải xuống tất cả các module cần thiết.

Bạn có thể nói rằng đó không phải là vấn đề lớn nếu bạn check in node_modules, nhưng nếu người check out code của bạn đang sử dụng hệ điều hành khác với bạn và một trong các module mà ứng dụng của bạn sử dụng được biên dịch khi cài đặt qua npm thì sao? Ứng dụng của bạn sẽ bị sập và người check out code của bạn sẽ không biết tại sao!

Ví dụ, các module như bcrypt và sentimental được biên dịch trên hệ thống máy chủ khi bạn cài đặt chúng vì chúng có các thành phần gốc được viết bằng C.

Cách tốt nhất để tránh check in thư mục node_modules của bạn là thêm nó vào .gitignore.

// .gitignore node_modules / *

Mẹo 7: Đừng quên return

Một lỗi phổ biến được thực hiện bởi tất cả các lập trình viên node là quên return sau khi callback. Mặc dù đôi khi điều này không có ý nghĩa gì, nhưng nhiều lần bạn sẽ gặp phải các vấn đề kỳ lạ vì calback của bạn đang được gọi hai lần.

Hãy xem một ví dụ nhanh

Nodemon là gì

Thoạt nhìn, đoạn code này có ý nghĩa. Nếu có lỗi, hãy gửi “error” trong callback, nếu không gửi good. Nhưng việc gọi callback không ngăn method hoàn thành việc thực thi. Nó sẽ chỉ chuyển sang việc gọi callback (“good”).

Bên trong các dòng code dài và phức tạp, làm điều này sẽ giúp bạn tiết kiệm hàng giờ chỉ để debug lúc làm web backend.

Node.js là nền tảng tuyệt vời để phát triển. Nếu bạn ghi nhớ 7 điều này trong khi lập trình, debug và deploy đến production, bạn có thể tiết kiệm thời gian rất nhiều.

Bạn muốn trở thành lập trình viên Node.js chuyên nghiệp trong thời gian ngắn nhất? Bạn muốn có việc làm IT mức lương khủng sau khoá học? Hãy đăng ký các khóa học lập trình NodeJS tại Nordic Coder – Trung tâm dạy lập trình uy tín và chuyên nghiệp. Ngoài ra, Nordic Coder còn là cầu nối nghề nghiệp IT giữa học viên và với các công ty công nghệ hàng đầu Việt Nam sau các khoá học lập trình.