계층형 아키텍처로 코드를 작성하는게 사실상 처음이다보니 하나하나 계속 오류가 뜨고있다....
이번엔 새로운 오류가 발생해서 적어두려고한다.
이건 내가 만들고잇는 게시판 프로젝트의 컨트롤러 부분이다.
여기서 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 번 서버가 열렸습니다
서버가 제대로 열림
'node.js' 카테고리의 다른 글
| 계층형 아키텍처로 프로젝트 작성하기 (02 프리즈마 설계) (0) | 2023.09.16 |
|---|---|
| 계층형 아키텍처로 프로젝트 작성하기 (트러블슈팅 01) (0) | 2023.09.16 |
| 주특기 프로젝트 시작 (0) | 2023.09.15 |
| 게시판 만들기 몽구스에서 prisma 로 변경하기 (0) | 2023.09.02 |
| prisma 를 사용하여 게시판 만들기 (0) | 2023.09.01 |