nestjs multer error

ansunny1170·2024년 6월 20일
0

개발

목록 보기
12/15

media module 개발 중, file: Express.Multer.Fil 선언을 해야 하는데 아래와 같은 에러가 발새했습니다.

global.Express' 네임스페이스에 내보낸 멤버 'Multer'이(가) 없습니다.ts(2694)

gpt가 제안안 1번 방법으로 해결했습니다.

npm install @types/express @types/multer --save-dev

gpt answer

해당 오류는 TypeScript에서 Express와 Multer를 사용할 때 발생하는 일반적인 오류 중 하나입니다. 오류 메시지는 global.Express 네임스페이스에서 Multer 타입을 찾을 수 없다는 것을 의미합니다. 이는 일반적으로 TypeScript 타입 정의 파일이 제대로 설정되지 않았거나, 타입 정의 파일에서 Multer가 제대로 내보내지 않았기 때문에 발생합니다.

이 문제를 해결하기 위해 다음 단계를 따라해 보세요:

1. @types/express 및 @types/multer 설치

먼저, Express와 Multer의 타입 정의 파일을 설치해야 합니다.

npm install @types/express @types/multer --save-dev

2. TypeScript 설정 파일(tsconfig.json) 확인

tsconfig.json 파일에서 typeRoots 옵션이 올바르게 설정되었는지 확인합니다. 보통 이 설정은 다음과 같이 되어 있어야 합니다:

{
  "compilerOptions": {
    "typeRoots": ["./node_modules/@types"],
    // 다른 설정들...
  }
}

3. TypeScript 파일에서 Multer 타입을 명시적으로 가져오기

타입스크립트 파일에서 import 구문을 사용하여 Multer 타입을 명시적으로 가져옵니다. 예를 들어, multer 미들웨어를 설정하는 파일에서 다음과 같이 작성할 수 있습니다:

import * as express from 'express';
import * as multer from 'multer';

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('File uploaded!');
});

app.listen(3000, () => {
  console.log('Server started on http://localhost:3000');
});

4. 글로벌 네임스페이스 수정

Express의 Request 객체에 Multer의 타입을 추가하려면 global 네임스페이스를 확장해야 합니다. 이를 위해 프로젝트 루트에 types 디렉토리를 만들고, 그 안에 express/index.d.ts 파일을 생성합니다.

// types/express/index.d.ts
import * as multer from 'multer';

declare global {
  namespace Express {
    interface Request {
      file?: multer.File;
      files?: multer.File[];
    }
  }
}

위의 파일을 작성한 후, tsconfig.json 파일에 typeRoots를 추가하여 TypeScript가 이 파일을 인식하도록 합니다.

{
  "compilerOptions": {
    "typeRoots": ["./types", "./node_modules/@types"],
    // 다른 설정들...
  }
}

위 단계를 수행한 후 TypeScript 서버를 다시 시작하고, 코드가 올바르게 작동하는지 확인하세요.

profile
공정 설비 개발/연구원에서 웹 서비스 개발자로 경력 이전하였습니다. Node.js 백엔드 기반 풀스택 개발자를 목표로 하고 있습니다.

0개의 댓글