금일 달성 항목
1) 노드 JS 뉴스피드 팀 프로젝트 진행 : 리뷰, 좋아요 기능 구현
2) 후발대 강의 수강: 인증 관련
문제 해결 과정 1- 좋아요 기능 구현
[문제]
좋아요 기능을 어떻게 구현해야하는지 모르는 상황이었습니다.
[시도]
좋아요 기능을 구현할때
1) 로그인한 사용자만 해당 맛집 게시글에 좋아요 가능
2) 해당 맛집 게시글에 좋아요는 한 번만 가능, 중복 좋아요는 불가
3) 좋아요가된 맛집 게시글에 다시 좋아요를 선택 했을 경우 좋아요가 취소되도록 구현
위와같은 조건을 만들고 구글링을 이것저것 해보았습니다.
https://heurm-tutorial.vlpt.us/12/
12. 좋아요 기능 구현하기 · GitBook
12. 좋아요 기능 구현하기 이번 12장에서는, 특정 포스트를 좋아요 / 좋아요 취소 하는것을 구현해보겠습니다. 포스트를 좋아요 할 때에는, Post 모델의 likesCount 값과 likes 배열을 수정하게 됩니다.
heurm-tutorial.vlpt.us
[해결]
likes.route.js
const express = require('express');
const router = express.Router();
const authMiddleware = require('../middlewares/auth-middleware');
const { Likes } = require('../models');
const { Users } = require('../models');
const { Places } = require('../models');
// 좋아요 확인하기
router.get('/', async (req, res) => {
const likes = await Likes.findAll({
attributes: ['placeId', 'likeId', 'UserId', 'createdAt', 'updatedAt'],
include: [
{
model: Users,
attributes: ['name'], //사용자 이름 연결
},
],
order: [['createdAt', 'DESC']],
});
return res.status(200).json({ data: likes });
});
//좋아요 만들기
router.post('/:placeId', authMiddleware, async (req, res) => {
const { userId } = res.locals.user;
const { placeId } = req.params;
try {
const existingLike = await Likes.findOne({
where: { UserId: userId, PlaceId: +placeId },
});
if (existingLike) {
await Likes.destroy({
where: {
UserId: userId,
PlaceId: +placeId,
},
});
res.status(200).json({
liked: false,
});
} else {
await Likes.create({
UserId: userId,
PlaceId: +placeId,
});
res.status(200).json({
liked: true,
});
}
} catch (error) {
console.error('오류가 발생했습니다.', error);
res.status(500).json({ message: '오류가 발생했습니다.' });
}
});
module.exports = router;
위 처럼 좋아요를 한 경우에는 false로 반환 좋아요를 하지 않은 경우에는 true로 반환해서 조회할때 true인 사용자만 확인이 가능한 것 까지 구현하였습니다.
[알게된 점]
기능을 구상하기 전에 미리 어떤 기능을 구현할 것 인지 정리하는게 중요하다고 느꼈습니다.
문제 해결 과정 2- 서버 오류
[문제]
git pull을 하고 front를 확인하기 위해 node app.js를 실행하고 웹사이트에 접속하니 아래와 같은 상황이 생겼습니다.
Error: secret option required for sessions
at session (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express-session/index.js:200:12)
at Layer.handle [as handle_request] (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:328:13)
at /Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:286:9
at Function.process_params (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:346:12)
at next (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:280:10)
at jsonParser (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/body-parser/lib/types/json.js:110:7)
at Layer.handle [as handle_request] (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:328:13)
at /Users/hyerim/Desktop/sparta/06. newsfeed_team/News-Feed-Project/node_modules/express/lib/router/index.js:286:9
[시도 및 해결]
해당 사이트에 들어가 확인을 하니
const app = express();
app.use(session({ secret: 'somevalue' }));
이러한 코드가 있었습니다. secret설정을 하면 된다고 해서 시도해보니 잘 해결되었습니다.
app.js
require('dotenv').config();
const express = require('express');
const session = require('express-session');
const MemoryStore = require('memorystore')(session);
const router = require('./routes/index.route.js');
const viewRouter = require('./views/router');
const { SESSION_SECRET_KEY } = process.env;
const dotenv = require('dotenv');
dotenv.config();
const app = express();
const PORT = 3000;
app.use(express.json());
app.use(session({ secret: 'somevalue' }));
app.use(
session({
secret: SESSION_SECRET_KEY,
resave: false,
rolling: true,
saveUninitialized: false,
store: new MemoryStore({ checkPeriod: 1000 * 60 * 60 }),
cookie: {
maxAge: 1000 * 60 * 60,
},
})
);
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.use(express.static(__dirname + '/views/static'));
app.use('/', viewRouter);
app.use('/api', router);
app.listen(PORT, () => {
console.log(PORT, '포트 번호로 서버가 실행되었습니다.');
});
[알게된 점]
생각보다 어렵게 생각하지 않아도 금방 해결되는 문제가 많은 것 같습니다.
'혼자 고민해보기_ 개발 > TIL (Today I Learned)' 카테고리의 다른 글
20230703(월)_ 노드 JS 뉴스피드 팀 프로젝트 발표 (0) | 2023.07.03 |
---|---|
20230629(목)_ 노드 JS 뉴스피드 팀 프로젝트 진행 (1) | 2023.06.29 |
20230627(화)_ 노드 JS 뉴스피드 팀 프로젝트 진행 (0) | 2023.06.27 |
20230626(월)_ 노드 JS 뉴스피드 팀 프로젝트 진행 (0) | 2023.06.27 |
20230623(금)_ 노드 JS 숙련 과제 Lv3 보완, 개인 공부 (0) | 2023.06.23 |