app.js
const app = express(); // 리퀘스트 받아서 리스폰스로 보내줄수 있는 express
app.use(express.json()); // payload받아올때 별도로 json화 안해줄 수 있다
const linksRouter = require('./routes/links');
app.use('/links', linksRouter);
routes/links
const linkController = require('../controllers/links/index')
router.get('/', linkController.get);
// 두번째인자는 콜백인데 가지고 온 객체 controller.key 입력해서
// value(callback)인 콜백실행
controllers/links/index
// select url from urls where url.id = req.params.id
getById: async (req,res) => {
let result = await url.findOne({where : { id : req.params.id}}) // 아이디 : 받아온 id 랑 같은 레코드 한줄 가져옴(객체하나)
await result.increment('visits')
// await result.update({ visits : result.visits + 1})
// await url.update( {visits : result.visits + 1} ,{where: {id: req.params.id}}) // {키 : 벨류} 씨퀄라이즈 객체형태로 테이블관리 {키:벨류}
res.redirect(result.url);
res.status(302).send(); // response 끝났다고 알려준다
},
post: (req,res) => { // paylode에 url이 적힌 상태에서 post요청이 들어오면 title만들어주고 객체형태로 보내줘야됨
if(isValidUrl(req.body.url)){
getUrlTitle(req.body.url, async(err,titleName)=>{ // 겟타이틀에서받는 인자가 url,콜백
if(err){ // url은 멀쩡한데 에러났을때
res.status(404).send();
} else {
let result = await url.create({title : titleName, url : req.body.url, visits: 0}); // url테이블에 추가해주는부분(insert into )
res.status(201)
res.json(result);
}
})
}
else{
res.status(404).send();
}
},
.findOne({ where: {title: 'aProject'}}) // 특정 컬럼으로 검색 .findByPk() // 프라이머리키로 검색 .increment(더하고싶은 컬럼) .increment('더하고싶은 컬럼', {by : '더할 숫자'}) .increment([ 'my-integer-field', 'my-very-other-field' ], {by: 2})// 여러개칼럼 --------------------------------------------------------------- //값을 변경하고, 변경점을 DB에 반영 .update( { status: 'inactive' }, /* 변경할 특성의 값을 명시합니다. */ { where: { subject: 'programming' }} /* 변경될 레코드의 조건을 명시합니다. */ ) ---------------------------------------------------------- .create() Person.create({ name: 'Rambow', firstname: 'John' }).then(john => { console.log(john.get({ plain: true })) }) // 결과: // { name: 'Rambow', // firstname: 'John', // id: 1, // createdAt: Tue, 01 May 2012 19:12:16 GMT, // updatedAt: Tue, 01 May 2012 19:12:16 GMT // }
Sequelize의 라이브러리를 사용하면서 메소드를 사용하게 되었는데,
sql구문과 비슷한점이 많아 이해는 조금 어렵게 하였지만
처음에 적용해서 문장을 만드는데 시간이 오래걸렸다.
각 라이브러리마다 도움을 주는것이 다르기때문에 혼동하지 않고 잘 이해해야겠다는 생각이 다시 한번 들었고, Sequelize는 프로미스기반이기때문에 .then 과 async를 사용하게 되었고 다시 한번 복습하게 되었다.