라우터 경로를 설정할 때, 순서가 영향을 미친다.
보통 정적 경로 > 동적 경로 순으로 동적경로가 가장 마지막 부분에 위치하는 것이 좋다.
Likes router를 설정할 때, 그래서 맨 앞 부분에 와있는 이유
만약에 router.use('/posts', [Posts, Comments, Likes]); 로
순서를 바꾸면 인식이 안되는 경우가 있는데,
Likes의 엔드포인트 '/like'를 앞에 Posts의 엔드포인드 '/:postId'에서 '/like'를 동적 매개변수로 인식하기도 해서 오류가 발생할 수 있다.
그러니 꼭 순서지키기 ⭐️
동적 경로 ex. /:postId/like
( 여기서 ':postId'와 같은 동적 매개변수를 사용할 수 있다.)
정적 경로 ex. /like
//routes/index.js
import express from 'express';
import Likes from './likes.js';
import Users from './users.js';
import Posts from './posts.js';
import Comments from './comments.js';
import Login from './login.js';
const router = express.Router();
router.use('/', [Users, Login]);
router.use('/posts', [Likes, Posts, Comments]);
export default router;
게시글 좋아요 조회 API 에서
게시글 좋아요 개수를 가져오도록 추가했다.
Prisma에서는 특정 필드의 개수를 _count를 이용해서 조회할 수 있는데,
방식은 아래와 같다.
일반적으로 _count를 사용한 방법은 데이터베이스의 성능과 쿼리 최적화 측면에서 효율적이다.
더 자세한 방식은
prisma.io 공식문서
설명 부분만 추가
'정렬' 중에서
관계 집계 값을 기준으로 정렬
예를 들어 다음 쿼리는 관련 게시물 수를 기준으로 사용자를 정렬합니다.
Posts
const getActiveUsers = await prisma.user.findMany({
take: 10,
orderBy: {
posts: {
_count: 'desc',
},
},
})
아래는 내가 작성한 코드
const posts = await prisma.posts.findMany({
//Likes 테이블에서 로그인한 유저가 좋아요를 누른 게시글을 찾습니다.
where: {
Likes: {
some: {
UserId: Number(userId),
},
},
},
select: {
postId: true,
UserId: true,
title: true,
createdAt: true,
updatedAt: true,
User: {
select: {
nickname: true,
},
},
// Prisma에서는 특정 필드의 개수를 조회할 수 있습니다.
_count: {
select: {
Likes: true,
},
},
},
orderBy: [
{
// 관계 집계 값을 기준으로 정렬. 좋아요 개수가 많은 순으로 정렬
Likes: {
_count: 'desc',
},
},
// 좋아요 개수가 동일할 경우 최신순으로 정렬
{
createdAt: 'desc',
},
],
});