데이터를 삭제하는 방법은 여러가지 입니다.
• remove(): 특정 조건을 만족하는 데이터를 모두 지웁니다.
• findByIdAndRemove(): id를 찾아서 지웁니다.
• findOneAndRemove(): 특정 조건을 만족하는 데이터 하나를 찾아서 제거합니다.
export const remove = async ctx => {
const { id } = ctx.params;
try {
await Post.findByIdAndRemove(id).exec();
ctx.status = 204; // No Content (성공하기는 했지만 응답할 데이터는 없음)
} catch (e) {
ctx.throw(500, e);
}
};
삭제 이후 다시 요청 시 에러 발생
데이터 수정
findByIdAndUpdate() 함수를 이용하여 데이터를 업데이트 합니다.
findByIdAndUpdate(id,업데이트 내용, 업데이트 옵션)
검증
id가 올바른 Objectid 인지 확인 할 필요가 있는데 이때 사용 할 수 있는 것이 isValid 이다
이때 id를 사용하는 함수는 읽기 삭제 수정 인데 일일히 코드에 검증 코드를 넣는 것은 비효율 적이니
미들웨어로 만들어서 넣어줍니다.
import mongoose from 'mongoose';
const { ObjectId } = mongoose.Types;
export const checkObjectId = (ctx, next) => {
const { id } = ctx.params;
if (!ObjectId.isValid(id)) {
ctx.status = 400; // Bad Request
return;
}
return next();
};
그 후 index에 미들웨어를 추가해서 동작하게 만들면 됩니다.
posts.get('/:id', postsCtrl.checkObjectId, postsCtrl.read);
posts.delete('/:id', postsCtrl.checkObjectId, postsCtrl.remove);
posts.patch('/:id', postsCtrl.checkObjectId, postsCtrl.update);
Request Body 검증
- 반드시 모델의 인스턴스 객체는 모델에 있는 스키마 필드 내용을 전달받아야한다.
만약 클라이언트에서 이걸 생략하면 에러 처리를 하지 않으면 빈 값이 저장되게 된다.
이걸 하게 해주는 라이브러리 Joi
$ yarn add joi