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
그리고 포스트맨으로 날려보니 해당 url을 찾아 볼 수 있었다.
포스트맨으로 날려보는 레퍼런스는 https://elfinlas.github.io/2019/01/16/postman-insert-img/
.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 |