본문 바로가기

Nodejs/NestJS

[NestJS] fastify middleware 추가하기(@fastify/multipart) 04

기본 미들웨어만 추가

yarn add @fastify/cookie @fastify/session @fastify/multipart  @fastify/cors @nestjs/platform-fastify 
yarn add class-validator class-transformer

- fastify를 사용할 것이므로 관련 패키지 추가

- class 검증을 위한 class-validator, class-transformer 추가

 

.env에 SESSION_SECRET추가

#APP PORT
PORT=4000
#SECRET KEY
SESSION_SECRET=
#DATASBASE CONFIG
DATABASE_HOST=127.0.0.1
DATABASE_PORT=3306
DATABASE_USERNAME=
DATABASE_PASSWORD=
DATABASE_NAME=

 

SESSION_SECRET는 openssl hex 32자리 난수 생성하여 사용

openssl rand -hex 32
a88ecaf80054bbcbfeae302916a47e1e95428a8b4a09c3918e26351f80d18db4

 

app.middleware.ts추가하여 넣기

import { middleware } from "./app.middleware";

  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
  middleware(app);

 

나머지들은 소스 참고 하면 되는데, multipart는 설명이 필요함.

fastify/multipart 7.xx 에서는 addToBody 옵션이 있었는데, 8.2.0에서 확인 결과, 해당 옵션 Depreacted 된 것을 확인.

추가로 방법을 찾아본 결과 attachFieldsToBody: "keyValues", 설정하고, onFile에서 사용할 value를 설정하면 됨.

이렇게 하면 addToBody와 비슷한결과를 만들 수 있음.

  app.register(multipart, {
    attachFieldsToBody: "keyValues",
    onFile: async (part: any) => {
      //part.value에 값을 넣으면 됨
      //filename이 필요없고 바로 buffer를 사용하려면
      // part.value = await part.toBuffer()
      part.value = { filename: part.filename, mimetype: part.mimetype, encoding: part.encoding, value: await part.toBuffer() };
      // set `part.value` to specify the request body value
    },
    ...
})

 - 위 설명처럼 buffer를 바로 받고싶으면 buffer를 value에 넣으면 되고

 - 파일명 등 속성값을 받아서 처리하려고 한다면, 정의해서 value에 넣어주면 됨.

 - limits는 환경이나 프로젝트에 따라 설정하면 됨.

* 다른 방법으로는  nest-file-fastify를 사용하는 방법도 있습니다.

@fastify/multipart : https://github.com/Blazity/nest-file-fastify

 

+ 추가 fastify는 await app.listen(PORT, "0.0.0.0");  0.0.0.0 을 설정해줘야 외부접근이 가능함. 

 

 

현재까지 코드 보기: https://github.com/close852/nestjs-toy/tree/04

 

 

반응형