[ NodeJS: 디버깅 ] Route.get() requires a callback function but got a [object Undefined]

현상

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시 중괄호로 감싸지 않아도 된다.