node.JS의 중요하고 기본적인 컨셉에 대해 배웠다.
때문에 Javascript 프론트엔드 작업을 할때 외부 JS파일을 불러오는것 처럼
불러오기만 해서는 작동하지 않는다.
이전 포스트의 예제 코드를 빌리자면
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);
위 코드에는 라우터, 콘트롤러가 모두 들어있다.
프로젝트가 매우 커진다면 이들을 분리하여 작성, 관리하는 것이 유지보수 면이나 코드 가독성 면에서 더 유리할 것이다.
파일을 세개로 나눠보자
import express from "express";
const app = express();
app.use("/node", nodeRouter);
import express from "express";
const nodeRouter = express.Router();
nodeRouter.get("/prac", handlePrac)
nodeRouter.get("/proj", handlePrac)
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한다.
모든 파일들이 같은 위치에 있다면
import express from "express";
import nodeRouter from "./router.js"
const app = express();
app.use("/node", nodeRouter);
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
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개만 가능하다.