node.JS import & export

404·2021년 12월 26일
0

node.JS no.06

import & export modules

node.JS의 중요하고 기본적인 컨셉에 대해 배웠다.

node.JS의 각 파일들은 독립적인 모듈이다.

때문에 Javascript 프론트엔드 작업을 할때 외부 JS파일을 불러오는것 처럼
불러오기만 해서는 작동하지 않는다.

export 해야 import 할 수 있다.

이전 포스트의 예제 코드를 빌리자면

import express from "express";
const app = express();

const nodeRouter = express.Router(); 
app.use("/node", nodeRouter); 

const handlePrac = (req, res) => res.send("node practice");
nodeRouter.get("/prac", handlePrac) ;

const handleProj = (req, res) => res.send("node project");
nodeRouter.get("/proj", handlePrac);

위 코드에는 라우터, 콘트롤러가 모두 들어있다.
프로젝트가 매우 커진다면 이들을 분리하여 작성, 관리하는 것이 유지보수 면이나 코드 가독성 면에서 더 유리할 것이다.

파일을 세개로 나눠보자

  1. index.js
import express from "express";
const app = express();

app.use("/node", nodeRouter); 
  1. router.js
import express from "express";

const nodeRouter = express.Router();
nodeRouter.get("/prac", handlePrac)
nodeRouter.get("/proj", handlePrac)
  1. controller.js
import express from "express";

const handlePrac = (req, res) => res.send("node practice");
const handleProj = (req, res) => res.send("node project");

문제 1. index.js에서 nodeRouter는 undefined이다.
문제 2. router.js에서 handlePrac과 handleProj는 undefined이다.

이 문제들을 해결하기 위해서는
해결 1. controller.js를 export하여 router.js에 import하고
해결 2. router.js를 export 하여 index.js에 import한다.
모든 파일들이 같은 위치에 있다면

  1. index.js
import express from "express";
import nodeRouter from "./router.js"

const app = express();

app.use("/node", nodeRouter); 
  1. router.js
import express from "express";
import {handlePrac, handleProj} from "./controller.js"

const nodeRouter = express.Router();
nodeRouter.get("/prac", handlePrac);
nodeRouter.get("/proj", handlePrac);

export default nodeRouter
  1. controller.js
import express from "express";

export const handlePrac = (req, res) => res.send("node practice");
export const handleProj = (req, res) => res.send("node project");

위와 같다.

default 로 export 할때는 node가 추출 파일의 default를 기억하고 있으므로
import 하는 파일에서 변수명을 변경해도 문제가 없지만
단순 export 할때는 변수명이 정확히 일치해야 한다.
export default는 파일당 1개만 가능하다.

profile
T.T

0개의 댓글