현상
Error: Route.get() requires a callback function but got a [object Undefined]
...(이하 생략)...
시도1: 함수 이름 정확성 체크
stackoverlflow를 찾아봤다. 동일한 버그를 겪은 사람이 있었다. 컨트롤러로 임포트하려던 함수의 이름이 달라서 버그가 생겼다고 한다.
따라서 나도 함수 이름이 일치하는지 확인했다. 하지만 틀린 것은 없었다.
시도2: import 문 변경 [ 해결 ]
혹시나해서 내 문법이 이상한가 싶어서 import문을 변경했다. 그랬더니 버그가 해결됐다.
문제원인분석
import문이 원인이었다. 다른 모듈로부터 함수나 변수를 가져올 때 export인 경우에는 import를 하는 모듈에서는 함수, 변수들을 중괄호로 감싸야했다.
import
import { edit, remove } from "../controllers/userController";
export
export const join = (req, res) => res.send("Join");
export const edit = (req, res) => res.send("Edit User");
export const remove = (req, res) => res.send("Remove User");
예외적으로 default export를 쓰는 경우에 중괄호를 사용하지 않고 import를 할 수 있다.
import
import userRouter from "./routers/userRouter";
default export
import express from "express";
const userRouter = express.Router();
export default userRouter;
결론
- 모듈에서 함수, 변수를 export를 할 때 import 시 함수, 변수들을 중괄호로 감싸야한다.
- 모듈에서 default export를 할 때 예외적으로 import시 중괄호로 감싸지 않아도 된다.