본문 바로가기

Project/TIL

20.03.21 ShareBook TIL

books table에서 해당 유저 id가 들어 있는 컬럼은 제외하고 데이터를 불러와야해서  Sequelize에서 [Op.notIn] 이란 걸 사용해야 했다.

그러려면 sequelize에 있는 Op란걸 사용해야하는데 아무리 찾아봐도 사용법만 나오고 이걸 불러와야 된다는 말은 없어서 많이 돌아돌아 갔다.

import { Op } from 'sequelize';

 

그러다 require 와 import의 차이점이 궁금해졌다.

찾아보니 require는 동적으로 모듈을 불러오지만, 불필요한 코드들까지 불러오기때문에 실제로 어떤 코드가 사용되는지는 알 수가 없다고 한다.

const sequelize = require('sequelize');

const Op = sequelize.Op;

 

그래서 사용할 코드들을 다시 지정해주어야한다. 

import는 특정 사용할 값을 직접 가져오므로 불필요한 파일들을 제거하고 코드량을 줄일 뿐만아니라, 성능적으로 좋다고 한다.


유저가 찍은 사진을 S3를 이용하여 올리고 해당 url을 데이터베이스에 저장해야 해서 관련 레퍼런스들을 찾아보며 코드를 작성하였다.

import multer from 'multer';
import multerS3 from 'multer-s3';
import AWS from 'aws-sdk';

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: 'ap-northeast-2',
});

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: String(process.env.AWS_BUCKET),
    metadata: (req, file, cb) => {
      cb(null, { fieldNname: file.fieldname });
    },
    key: (req, file, cb) => {
      // let extension = path.extname(file.originalname);
      console.log(file);
      cb(null, file.originalname);
    },
    acl: 'public-read-write',
    contentType: multerS3.AUTO_CONTENT_TYPE,
  }),
});

app.post('/upload', upload.single('photo'), (req: Request, res: Response) => {
  console.log('req.file: ', req.file);
  res.json(req.file);
});

 

분명 레퍼런스를 참고 해서 똑같이 작성하였는데도 500에러가 났다. 에러 부분을 구글링해도 마땅히 해답이 나오지 않아서 혹시 .env에 작성한 코드들이 안먹는건 아닐까해서 .env를 사용하지않고 awsconfig.json을 작성하고 해당 레퍼런스를 참고하여 작성해보았다.

https://victorydntmd.tistory.com/70

 

[Node.js] AWS(1) - S3 사용하기 ( aws-sdk, multer-s3 모듈 )

2019. 08. 11 수정 1. AWS S3( Simple Storage Service )란? S3는 AWS의 스토리지 서비스로 구글 드라이브, 네이버 클라우드와 비슷한 개념입니다. 그런데 S3는 HTTP 프로토콜로 파일 업로드 및 다운로드가 가능하..

victorydntmd.tistory.com

그리고 포스트맨으로 날려보니 해당 url을 찾아 볼 수 있었다.

포스트맨으로 날려보는 레퍼런스는 https://elfinlas.github.io/2019/01/16/postman-insert-img/

 

Postman에서 파일 전송 처리하기

Postman을 사용하다가…최근 개발을 하면서 Rest api를 개발하다 보니 개발된 api를 테스트하기 위해 Postman을 사용한다.그런데 기능을 개발하던 중 첨부파일 기능을 개발하게 되었는데 첨부를 어떻게 해야 하는지 몰라서 찾아보았다.(매번 파라메터만 주는 것만 하다보니…) 파일 첨부먼저 url과 http protocal을 적당하게 작성 후 하단의

elfinlas.github.io

.env 설정을 찾아보니 .env를 사용하려면

import 'dotenv/config';

// typesript는 추가로 npm install @types/dotenv --save-dev 설치를 해줘야 한다.

 

를 사용해야 했다. 근데 사용을 안해도 .env가 사용되는 함수 페이지도 있어서 아직 차이점이 많이 헷갈린다. 또 어떤건 type을 지정해주지 않아도 되고 어떤건 type을 지정해줘야 되서 좀 더 해당 문제에 대해 찾아봐야겠다.

수정 코드 

import multer from 'multer';
import multerS3 from 'multer-s3';
import AWS from 'aws-sdk';
import 'dotenv/config'; // 수정 

const s3 = new AWS.S3({
  accessKeyId: process.env.AWS_ACCESS_KEY_ID,
  secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
  region: 'ap-northeast-2',
});

const upload = multer({
  storage: multerS3({
    s3: s3,
    bucket: String(process.env.AWS_BUCKET),
    metadata: (req, file, cb) => {
      cb(null, { fieldNname: file.fieldname });
    },
    key: (req, file, cb) => {
      // let extension = path.extname(file.originalname);
      console.log(file);
      cb(null, file.originalname);
    },
    acl: 'public-read-write',
    contentType: multerS3.AUTO_CONTENT_TYPE,
  }),
});

app.post('/upload', upload.single('photo'), (req: Request, res: Response) => {
  console.log('req.file: ', req.file);
  const data: any = req.file;
  res.json(data.location); // req.file에 들어 있는 location을 사용하려면 type을 지정해줘야한다
});

 

'Project > TIL' 카테고리의 다른 글

20.03.23 ShareBook TIL  (0) 2020.03.24
20.03.22 ShareBook TIL  (0) 2020.03.22
20.03.20 ShareBook TIL  (0) 2020.03.20
20.03.19 ShareBook TIL  (0) 2020.03.20
20.03.18 ShareBook TIL  (0) 2020.03.19