이번에는 Sequelize ORM을 사용하는 스프린트를 진행했다. 스프린트를 진행할 때 공식문서 보다는 누군가 개념을 정리해둔 블로그 내용이나 예시들을 많이 찾아봤었는데 이번 스프린트는 내가 잘 못 찾은 건지 원하는 내용들이 없어서 거의 공식문서만을 이용해서 해결해야 했었다. 그리고 한 동기분의말 처럼 스프린트를 진행하기 위한 힌트들이 공식문에 다 나와있었다. 덕분에 이번 스프린트에서 공식문서를 이용하는 방법을 조금 더 알게 된 거 같다.
이번 과제는 잘 되는 거 같은데 잘 안됐다. 이게 무슨 말인가 하면 내가 구현한 기능을 포스트맨을 이용해서 확인하면 정상 작동을 하는데 테스트 케이스를 확인해 보면 통과되지 못하는 문제들이 상당히 많았다. 도저히 어디서부터 꼬이기 시작한 건지 몰라서 헬프데스크에 질문을 올려뒀었다. 늦은 시간이라 다음날 답변이 달릴 거라 생각했는데 코드스테이트 엔지니어 분이 아닌 같은 동기분인 갓 대성님께서 질문을 보고 연락을 주셨다. 그리고 한 시간이 넘는 시간 동안 줌에서 문제를 해결하는 과정을 하나하나 알려주셨다. 정말 감사하고 도움이 많이 되는 시간이었다.
코드에는 크고 작은 문제들이 상당히 많았었다. 특정 개념에 대해서 완전한 이해가 없는 상태로 작성을 하다 보니 문제점들이 생겼다
문제코드
post: async (req, res) => {
let { url } = req.body;
let result = await utils.getUrlTitle(url, (err, title) => {
if (err) throw err;
else {
db.url.create({ url, title })
}
})
res.status(201).json(result);
},
해결
post: async (req, res) => {
let { url } = req.body;
let result = await new Promise((resolve, reject) => {
utils.getUrlTitle(url, (err, title) => {
if (err) throw err;
else {
resolve(db.url.create({ url, title }));
}
reject(err);
})
})
res.status(201).json(result);
},
new Promise
를 사용해서 강제로 프로미스 패턴으로 만들어 주었다.
문제코드
redirect: async (req, res) => {
let result = await db.url.increment(
{ visits: 1 }, { where: { id: req.params.id } });
console.table(res.body)
res.status(302).json(result)
}
해결
let { id } = req.params
let result = await db.url.findOne({ where: { id } })
// url의 파라미터를 얻어오고
// result에 url모델에서 id 부분을 선택한다.
await result.increment('visits')
// 선택한 id를 가지고 있는 모델의 visits를 증가시킨다.
res.redirect(result.dataValues.url);
//리디렉션할 result를 이용해서 url을 넣어준다.