TIL ES6 module화와 .env 실행

ESH'S VELOG·2023년 7월 27일
0

오늘은 키오스크 프로젝트를 만들기 위해 실행하는 server단을 class화하는 코드를 만들어 보려 한다.

기존에 사용하던 방식 변경

  • javascript 기존 문법을 사용하여 모듈이나 라이브러리를 선언한 뒤 require해온다.
const express = require('express');

=> 변경 후
ES6 문법을 사용하여 import ... from을 사용

import express from 'express';
  • port, host / data host, password 등 서버 정보와 연관된 부분들은 .env를 이용하여 환경변수로 제어한다.
    1) npm install dotenv
    => env를 사용하기 위한 모듈 설치
    2) 루트폴더에 .env 파일 생성
    3) .env파일에 제어할 환경변수 할당
    ex
HOST=localhost
PORT=3000

주의점)

  • .env파일은 따옴표나 쉼표, 세미콜론, 빈칸을 허용하지 않는다
  • .env파일은 대문자와 언더바만 허용한다
    4) 환경변수를 사용하고자 하는 파일에 아래와 같이 가져온다
import dotenv from 'dotenv';
dotenv.config();

5) 환경변수를 가지고 올때는 process.env로 가져온다.
ex)

const {PORT: port, HOST: host} = process.env;
console.log('port: ',port,'host: ', host)

코드를 실행하면

port: 3000, host: local

로 잘 나오는 것을 확인할 수 있다.

에러 발생1)

(node:11724) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
E:\Node\kiosk_project\src\init.js:1
import dotenv from 'dotenv';
^^^^^^

구글링 해보니 ES6 문법을 쓰려면 서버를 모듈화시키는 작업이 필요한 것 같다.
package.json에 프로젝트 이름 아래에 "type":"module"을 넣어줬더니 에러가 해결되었다.

에러 발생 2)
init.js를 실행하기 위해 powershell로 cd src로 들어가서 node init.js를 실행시켜 보았다
그런데 실행 결과로

Server is Running on http://undefined:undefined

가 나왔다.
localhost와 port가 undefined로 나왔다는 것은 init.js에서 .env를 제대로 불러오지 못했다는 것으로 생각해서 console.log로 process.env.HOST를 테스트로 불러왔더니 역시 undefined로 나왔다.

해결
=> 혹시 루트폴더가 아닌 다른 폴더에서 서버가 만들어져서 오류가 나는 걸까 해서 루트폴더에 app.js로 만들어 실행해 보니 .env에서 localhost와 port(3000번)이 잘 불러와졌다.
그렇다면 .env는 어느 폴더의 파일에서 안불러와지는 것이 아니고 실행 시 루트에서 실행을 해야 불러와질 수 있는것이 아닐까 생각이 들었다
그래서 루트폴더에서 node src/init.js를 쳐보니 제대로 실행되는 것을 확인하였다.

profile
Backend Developer - Typescript, Javascript 를 공부합니다.

0개의 댓글