Sequelize에서 model(DB에선 table이라고 불리우는)을 만들었다면 또 Sequelize-cli로 init을 해서 migration을 했다면 server폴더에는 sql없이도 자바스크립트에서 mysql을 사용할 수 있는 ORM(Object Relational Mapping)를 사용할 수 있다.
나 같은 경우는 갤러리 CRUD를 위해 gallery라는 model을 만들었다. 그 다음에 gallery모델에서 CRUD를 하기 위해선 객체 구조 분해 할당으로 모델 객체를 가져온다. 이때 모델 객체는 Promise{ }으로 되어 있어서 .then 이나 async, await 같은 키워드를 사용해야한다.
비동기 참고 자료 ⇒ https://www.youtube.com/watch?v=s1vpVCrT8f4
// controllers/index.js
const { gallery : _gallery } = require('../models');
module.exports = async (req, res) => {
console.log('_gallery : ', _gallery);
console.log('_gallery.create() : ', _gallery.create());
// expected output => Promise { <pending> }
console.log('await _gallery.create() : '. await _gallery.create())
// expected output =>
/*
gallery {
dataValues: {
id: 1,
updatedAt: 2021-12-20T06:53:48.447Z,
createdAt: 2021-12-20T06:53:48.447Z
},
_previousDataValues: {
id: 1,
title: undefined,
comment: undefined,
pictureUrlOne: undefined,
pictureUrlTwo: undefined,
pictureUrlThree: undefined,
createdAt: 2021-12-20T06:53:48.447Z,
updatedAt: 2021-12-20T06:53:48.447Z
},
uniqno: 1,
_changed: Set(0) {},
_options: {
isNewRecord: true,
_schema: null,
_schemaDelimiter: '',
attributes: undefined,
include: undefined,
raw: undefined,
silent: undefined
},
isNewRecord: false
}
*/
res.status(200).send('Hello World');
}
메소드는 Sequelize 공식문서 참고할 것
https://sequelize.org/master/manual/model-querying-basics.html
또는 https://velog.io/@cadenzah/sequelize-document-1
Pagination관련 처리를 위해 findAndCountAll
을 사용했다.
offset 옵션을 이해하기 위해 위키백과에서 offset의 뜻을 찾아봤다. 만약 내가 이해한 바로는 두번째 주소를 만들기위해 기준이 되는 주소에 더해진 값이라고 한다. 이는 어셈블리언어에서 사용하는 의미같은데 난 여기서 일단 주소를 뜻함으로 이해하자.
https://ko.wikipedia.org/wiki/오프셋(컴퓨터과학)
https://genesis8.tistory.com/74
npm install axios
rest api을 사용할땐 axios을 사용했다.
이미지가 휘발성으로 날아가지 않도록 DB에 저장하려면 이미지는 다른 스토리지 서비스, 즉 다른 서버에 놓고 db에는 이미지의 url만 놓아서 CRUD할 수 있도록 구현하는 것이 일반적이다.
이미지 저장 정말 중요한 내용인데요. 예상과 다르게 데이터베이스와 큰 관련이 없어서 이 강의에서 다루는건 적합하지 않아요. 그 이유는 이미지는 데이터베이스에 저장되지 않고 AWS S3와 같은 파일 저장소에 저장되기 때문입니다. 파일저장소에 저장하면 해당 이미지의 url을 받을 수 있는데요. 데이터베이스에는 이 url만 저장하게 되요. 클라이언트(프론트엔드)가 이미지를 열고 싶을 때는 백엔드로부터 url을 받게 되고 이 url로 프론트에서 직접 이미지를 불러와요(img tag를 이용해서요)
const router = require('express').Router();
const controller = require('./controllers');
// userId로 전체 주문 내역을 조회하는 라우팅
router.get('/:userId/orders', controller.orders.get);
// 쇼핑 카트에서 새로운 주문을 생성하는 라우팅
router.post('/:userId/orders/new', controller.orders.post);
module.exports = router;
const express = require('express');
const router = require('./routes');
const cors = require('cors');
const morgan = require('morgan');
const parser = require('body-parser');
const controller = require('./controllers');
const app = express();
const port = 4000;
app.use(
morgan(':method :url :status :res[content-length] - :response-time ms')
);
app.use(cors());
app.use(parser.json());
app.use('/users', router);
app.get('/items', controller.items.get);
module.exports = app.listen(port, () => {
console.log(`🚀 Server is starting on ${port}`);
});