소스코드
- [Spark] Scala DataFrame 특정 컬럼으로 정렬하기 (+소스코드) 2020.02.28
- [Node] 회원 인증 시스템 도입 및 포스트 검색 2020.02.16
[Spark] Scala DataFrame 특정 컬럼으로 정렬하기 (+소스코드)
2020. 2. 28. 20:21
[Node] 회원 인증 시스템 도입 및 포스트 검색
2020. 2. 16. 18:12
- 글 삭제/수정은 작성자만 할 수 있어야 한다.
- 미들웨어를 수정
/src/lib/
에checkLoggedIn.js
를 생성/src/api/posts/posts.ctrl.js
에checkOwnPost
,getPostById
를 추가
export const checkOwnPost = (ctx, next) => {
const { user, post } = ctx.state;
if (post.user._id.toString() !== user._id) {
ctx.status = 403;
return;
}
return next();
};
export const getPostById = async (ctx, next) => {
const { id } = ctx.params;
if (!ObjectId.isValid(id)) {
ctx.status = 400; // Bad Request
return;
}
try {
const post = await Post.findById(id);
if (!post) {
ctx.status = 404; // Not found
return;
}
ctx.state.post = post;
return next();
} catch (e) {
ctx.throw(500, e);
}
return next();
};
/src/api/posts/index.js
에 아래와 같이 미들웨어 추가
posts.get('/', postsCtrl.list);
posts.post('/', checkLoggedIn, postsCtrl.write);
const post = new Router(); // /api/posts/:id
post.get('/', postsCtrl.read);
post.delete('/', checkLoggedIn, postsCtrl.checkOwnPost, postsCtrl.remove);
post.patch('/', checkLoggedIn, postsCtrl.checkOwnPost, postsCtrl.update);
posts.use('/:id', postsCtrl.getPostById, post.routes());
export default posts;
username/tags로 포스트 필터
- 포스트 조회, 태그 조회
/* 포스트 목록 조회
GET /api/posts
/api/posts?username=jhl
/api/posts?tag=다리디리
*/
export const list = async ctx => {
const page = parseInt(ctx.query.page | '1', 10);
if (page < 1) {
ctx.status = 400;
return;
}
const { tag, username } = ctx.query;
const query = {
// username, tag가 유효할때만 객체 안에 해당 값을 넣겠다는 의미
...(username ? { 'user.username': username } : {}),
...(tag ? { tags: tag } : {}),
};
try {
const posts = await Post.find(query)
.sort({ _id: -1 })
.limit(10)
.skip((page - 1) * 10)
.exec();
const postCount = await Post.countDocuments(query).exec();
ctx.set('Last-Page', Math.ceil(postCount / 10));
ctx.body = posts
.map(post => post.toJSON())
.map(post => ({
...post,
body:
post.body.length < 200 ? post.body : `${post.body.slice(0, 200)}...`,
}));
} catch (e) {
ctx.throw(500, e);
}
};
'Web 개발 > Node' 카테고리의 다른 글
[Node] Koa Elasticsearch 사용하기 (0) | 2020.03.04 |
---|---|
[Node] Access to XMLHttpRequest from origin has been blocked by CORS policy (0) | 2020.03.01 |
[Node] JWT를 이용한 로그인, 로그아웃, 상태체크 RESTApi 토큰기반인증 구현 access_token (+소스코드) (1) | 2020.02.16 |
[Node] 세션 기반 인증 vs 토큰 기반 인증 (로그인 상태를 어디서) (0) | 2020.02.16 |
[Node] 페이지네이션 (Pagination) 구현 & Body 내용 제한 소스코드 예제 (0) | 2020.02.16 |