# Thiết lập configuration trong NestJs

Trong mỗi một project chúng ta đều cần thiết lập các configuration cho từng môi trường làm việc khác nhau ```test/dev/staging/prod```.

Trong NestJS cũng đã cho chúng ta một hướng dẫn về việc setup configuration, tuy nhiên dự án công ty mình lại chọn cách sử dụng ```config module``` (thực sự mình cũng chưa tìm hiểu được lý do dùng config module thay vì sử dụng config default như NestJS hướng dẫn - sẽ update thêm sau)

Đầu tiên chúng ta cần install package cần thiết

```
npm i config dotenv --save
```

Tiếp theo, trong **project root folder** ta tạo ra một **config folder** để chứa các **config file** (ở đây mình chọn **.yaml** làm định dạng config file - chúng ta có thể sử dụng các định dạng khác như **.json, .js** đều được)

```
/config
  default.yaml
  prod.yaml
  staging.yaml
  dev.yaml
  test.yaml
```

Ví dụ nội dung của ```test.yaml```

```
# NODE_ENV=test
server:
  port: 5000

mongodb:
  uri: mongodb://localhost:27017/db-name

```

Tiếp theo để ứng dụng có thể nhận biết được môi trường đang thực thi là môi trường nào để từ đó sẽ lấy config tương ứng thì ta cần tạo một file ```.env``` nằm trong **project root folder** với nội dung

```
NODE_ENV=test // thay thế test bằng dev/staging/prod cho các file config tương ứng khác
// Thực ra khi triển khai trên các môi trường thật thì chúng ta không cần file .env này
// mà chúng ta sẽ phải setup biến môi trường ở trong chính môi trường đó
```

** Lưu ý:
- Các config sẽ được lấy tương ứng với nội dung config file
- Nhưng nếu config cần lấy không có trong config file tương ứng thì nó sẽ tìm trong ```defaul.yaml```

Tiếp theo chúng ta phải làm cho ứng dụng hiểu được file ```.env``` là file chứa biến môi trường bằng cách thêm đoạn code sau vào trên cùng file```main.ts```

```
require('dotenv').config();
```

Cuối cùng để sử dụng các biến config ta sẽ phải import config module và sử dụng nó như ví dụ dưới đây

```
import * as config from 'config';

const port = config.get('server.port');
```
