계층형 아키텍처로 프로젝트 작성하기 03 (default 오류)
계층형 아키텍처로 코드를 작성하는게 사실상 처음이다보니 하나하나 계속 오류가 뜨고있다....
이번엔 새로운 오류가 발생해서 적어두려고한다.
이건 내가 만들고잇는 게시판 프로젝트의 컨트롤러 부분이다.
여기서 export default class 이런식으로 default 를 넣으면 오류가 생겼다.
컨트롤러
//import {ProjectService} from './service.js'
export default class ProjectController {
constructor(projectService){
this.projectService = projectService;
}
// projectService = new ProjectService();
/* 프로젝트 생성 */
createProject = async(req,res,next) =>{
//const {id} = req.user;
const {title, description, image, liveSiteUrl, githubUrl, category} = req.body;
const project = await this.projectService.createProject(
//id,
title,
description,
image,
liveSiteUrl,
githubUrl,
category,
);
return res.status(201).json({project});
}
/* 프로젝트 목록 조회 */
getProject = async(req,res,next) =>{
}
/* 프로젝트 상세 조회 */
getByIdProject = async(req,res,next) =>{
}
/* 프로젝트 수정 */
updateProject = async(req,res,next) =>{
}
/* 프로젝트 삭제 */
deleteProject = async(req,res,next) =>{
}
}
import {ProjectController} from './contoller.js';
^^^^^^^^^^^^^^^^^
SyntaxError: The requested module './contoller.js' does not provide an export named 'ProjectController'
오류의 메세지는 이렇다.
작성한 라우터
import express from "express";
import {prisma} from '../utils/prisma/index.js';
import {ProjectController} from './contoller.js';
import {ProjectService} from "./service.js";
import {ProjectRepository} from "./repository.js";
const router = express.Router();
// 인스턴스 생성
const projectRepository = new ProjectRepository(prisma);
const projectService = new ProjectService(projectRepository)
const projectController = new ProjectController(projectService);
// /* 게시글 생성 */
router.post('/', projectController.createProject);
//validate 추가 필요
// /* 게시글 목록 조회 */
router.get('/', projectController.getProject)
/* 게시글 상세 조회 */
router.get('/:postId', projectController.getByIdProject)
/* 게시글 수정 */
router.put('./postId', projectController.updateProject)
//validate 추가 필요
/* 게시글 삭제*/
router.delete('./postId', projectController.deleteProject)
export default router;
문제해결
export default를 사용하지 않을 때
모듈에서 'export default'를 사용하지 않으면 해당 모듈에서 내보내는 것은 명명된 내보내기(named exports)입니다. 이 경우 모듈에서 내보내는 것은 객체 또는 함수 등 여러 항목 중 하나일 수 있으며, 가져올 때 중괄호({})를 사용하여 해당 항목을 지정해야 합니다.
{} 를 명시적으로 기입해서 써야함
export default를 사용할 때
'export default'를 사용하면 해당 모듈에서 기본 내보내기(default export)가 됩니다. 이 경우 모듈에서 하나의 항목만 내보내야 하며, 가져올 때 중괄호({}) 없이 해당 항목을 가져옵니다.
중괄호 없이 써야함
한마디로 라우터에서 난 중괄호로 import 를 했는데 다른쪽에서 default 를 사용해서 오류가 난것
export class ProjectController {
constructor(projectService){
this.projectService = projectService;
}
수정후
[nodemon] restarting due to changes...
[nodemon] starting `node src/app.js`
3999 번 서버가 열렸습니다
서버가 제대로 열림