Thiết lập node-env cho Node.js (Môi trường Product, Dev, Test)

Thiết lập node-env cho Node.js (Môi trường Product, Dev, Test).

(Xem thêm: Tự học Node.js qua ví dụ)

NODE_ENV trong Node.js là gì?

NODE_ENV là một biến môi trường giúp xác định môi trường chạy của ứng dụng Node.js từ đó giúp lựa chọn các cấu hình khác nhau của ứng dụng tùy theo môi trường.

Ví dụ 1

Bạn tạo một ứng dụng node.js có kết nối tới cơ sở dữ liệu.

  • Khi deploy ứng dụng đó lên môi trường product (môi trường chạy thật). Thì ứng dụng sẽ kết nối tới database chứa dữ liệu thực tế cho khác hàng, người dùng nhập vào… Dữ liệu này rất quan trọng và ko được chỉnh sửa hay làm mất nó.
  • Khi bạn lập trình, tạo tính năng mới cho ứng dụng này thì bạn cần phải kết nối tới database local hoặc một database khác để test, thử tính năng mới chứ ko được kết nối tới database product
  • Tương tự khi bạn tạo một bản cho tester test thì họ cũng sẽ kết nối tới 1 database riêng với bộ dữ liệu riêng theo từng case để test.

Vấn đề đặt ra là mỗi lần deploy ứng dụng node.js trên các môi trường khác nhau (Product, dev, test). Bạn lại phải sửa lại code để nó kết nối tới 1 một database khác nhau. Nhất là trong trường hợp việc deploy ứng dụng tự động thì việc sửa code đó lại phức tạp hơn.

Giải pháp là khi deploy ứng dụng ta sẽ kiểm tra đó là môi trường nào để tạo kết nối tới database đó. Và biến node_env chính là biến để kiểm tra môi trường chạy ứng dụng node.js.

Ví dụ 2

Một ví dụ khác nữa rất hay gặp đó là khi bạn chạy ứng dụng ở môi trường dev thì bạn sẽ cần log ra màn hình console để xem log trực tiếp. Trong khi môi trường product thì hoàn toàn không cần thiết (ở trên môi trường product người ta sẽ xem log qua file log)

Ở đây mình sẽ kiểm tra nếu NODE_ENV không phải là ‘production‘ thì mình mới thực hiện log ra console

(Xem lại: Code ví dụ Node.js logger)

if (process.env.NODE_ENV !== 'production') {
  logger.add(new winston.transports.Console({
    format: winston.format.simple()
  }));
}

Hướng dẫn thiết lập NODE_EVN

Thực chất thì NODE_ENV là một biến môi trường trên hệ điều hành. Do đó bạn không nhất thiết phải đặt tên là NODE_ENV, ví dụ bạn có thể đặt là ENV_NODE… và khi check môi trường chạy ứng dụng, bạn sẽ check theo tên biến mà bạn đã set trên hệ điều hành.

Để thiết lập biến ENV_NODE trên MacOS, Linux (Ubuntu…) ta mở màn hình terminal chạy lệnh sau:

export NODE_ENV=ten_moi_truong

Để thiết lập biến ENV_NODE trên Windows ta mở cửa sổ cmd hoặc powershell chạy lệnh sau:

SET NODE_ENV=ten_moi_truong

Ví dụ:

Thiết lập node-env cho Node.js (Môi trường Product, Dev, Test)

Hoặc bạn cũng có thể chạy ứng dụng với lệnh sau:

NODE_ENV=ten_moi_truong node app.js

Hoặc thiết lập NODE_ENV trong file package.json (cách này mình không suggest vì nó làm mất tính linh hoạt của ứng dụng theo môi trường)

{
  ...
  "scripts": {
    "start": "NODE_ENV=production node ./app"
  }
  ...
}

Trong code Node.js, để check giá trị biến NODE_ENV ta dùng lệnh sau:

process.env.NODE_ENV

 

Okay, Done!

References:

https://stackoverflow.com/…/how-to-set-node-env

stackjava.com