Thông thường chúng ta sẽ lưu cấu hình cần thiết của một ứng dụng trong một tập tin thay vì fix cứng trong mã nguồn để có thể dễ dàng tuỳ biến với từng môi trường, ví dụ môi trường ở local, môi trường ở alpha, beta hay product sẽ phải khác. Trong bài này chúng ta sẽ cùng nhau tìm hiểu về tập tin cấu hình trong NodeJS nhé.

Khởi tạo dự án

Chúng ta sẽ khởi tạo thư mục có tên configuration-file và một tập tin có tên main.js
Đọc tập tin cấu hình
Hãy nói bạn cần cấu hình mongodb url bạn có thể tạo ra tập tin config/application.json như sau:

{
    "hello": "world",
    "mongoDbUrl": "mongodb://root:12345678@localhost:27017/test?authSource=admin"
}

Sau đó trong tập tin main.js bạn sẽ chỉ cần đọc tập tin cấu hình này như sau:

var configDefault = require('./config/application.json');

console.log(configDefault);

Chạy chương trình bằng lệnh node main.js kết qủa chúng ta nhận được là:

{
  hello: 'world',
  mongoDbUrl: 'mongodb://root:12345678@localhost:27017/test?authSource=admin'
}

So với những ngôn ngữ khác thì NodeJS quá tiện chỗ này.

Cấu hình cho nhiều môi trường

Giả sử chúng ta có các môi trường alpha, beta, rc và production, tương ứng với mỗi môi trường này thì cấu hình của mongoDbUrl sẽ khác nhau, như vậy chúng ta có thể tạo ra các tập tin tương ứng như sau:

application-alpha.json:

{
    "mongoDbUrl": "mongodb://alpha:alpha-password@localhost:27017/alpha?authSource=admin"
}

application-beta.json:

{
    "mongoDbUrl": "mongodb://beta:beta-password@localhost:27017/beta?authSource=admin"
}

application-rc.json

{
    "mongoDbUrl": "mongodb://rc:rc-password@localhost:27017/rc?authSource=admin"
}

application-prod.json

{
    "mongoDbUrl": "mongodb://prod:prod-password@localhost:27017/prod?authSource=admin"
}

Do chỉ khác nhau mỗi mongoDbUrl nên chúng ta không cần phải có cấu hình “hello”: “world” trong các tập tin cấu hình cho từng môi trường.
Bây giờ chúng ta có thể cập nhật nội dung của tập tin main.js như sau:

const configDefault = require('./config/application.json');
const configAlpha = require('./config/application-alpha.json');
const configBeta = require('./config/application-beta.json');
const configRc = require('./config/application-rc.json');
const configProd = require('./config/application-prod.json');

const configurationByEnvironmentName = {
    'alpha': configAlpha,
    'beta': configBeta,
    'rc': configRc,
    'prod': configProd
};

// Lấy tham số từ dòng lệnh
// Lấy từ vị trí thứ 2 vì tham số đầu tiên là node và tham số thứ 2 là script path
const args = process.argv.slice(2);

const environmentName = args[0];
const config = {
    ...configDefault,
    ...configurationByEnvironmentName[environmentName]
};

console.log(config);

Ở đây chúng ta có:

  1. Khai bao một loạt các đối tượng lưu trữ cấu hình của từng môi trường.
  2. Tạo ra một map ánh xạ configurationByEnvironmentName giữa tên của môi trường với đối tượng lưu trữ cấu hình.
  3. Lấy ra tên của môi trường được truyền vào thông qua command line.
  4. Tạo ra một đối tượng cấu hình mới được gộp từ cấu hình mặc định và cấu hình theo môi trường. Chỗ này phải cảm ơn javascript vì toán tử … đã giúp chúng giảm được bao nhiêu thời gian và mã nguồn để gộp được 2 đối tượng với nhau.
    Khởi chạy chương trình thông qua lệnh:
node main.js <tên môi trường>

Ví dụ:

node main.js beta

Chúng ta sẽ nhận được kết quả thông tin cấu hình tương ứng beta như sau:

{
  hello: 'world',
  mongoDbUrl: 'mongodb://beta:beta-password@localhost:27017/beta?authSource=admin'
}

Tổng kết

Như vậy chúng ta đã cùng nhau tạo tìm hiểu về cấu hình thông qua tập tin với NodeJS.
Cám ơn bạn đã quan tâm đến bài viết|video này. Để nhận được thêm các kiến thức bổ ích bạn có thể:

  1. Đọc các bài viết của TechMaster trên facebook: https://www.facebook.com/techmastervn
  2. Xem các video của TechMaster qua Youtube: https://www.youtube.com/@TechMasterVietnam nếu bạn thấy video/bài viết hay bạn có thể theo dõi kênh của TechMaster để nhận được thông báo về các video mới nhất nhé.
  3. Chat với techmaster qua Discord: https://discord.gg/yQjRTFXb7a