TIL | #24 Node.js | mongoDB, mongoos, esm

trevor1107·2021년 4월 15일
0

2021-04-14(수)

mongoos moudle

yarn add mongoos@5.5.2

yarn add dotenv@7.0.0

mongoos Schema에서 기본적으로 지원하는 타입은 아래와 같다.

String, Number, Date, Boolean,
Buffer : 파일을 담을 수 있는 버퍼
Mixed(Schema,Types.Mixed) : 어떤 데이터도 넣을 수 있는 타입
ObjectId(Schema.Types.Mixed) : 객체 아이디, 주로 다른 객체와 비교할 때 사용한다.
Array : 배열 형태의 값으로 [ ]로 감싸서 사용한다

우선 몽구스에서 데이터베이스 데이터를 정의하자.

// models.post.js
import mongoose from 'mongoose';

const {Schema} = mongoose;

const PostSchema =  new Schema({
    title:String,
    body:String,
    tags:[String],//문자열로 이루어진 배열
    publishedDate:{
        type:Date,
        default:Date.now,//현재 날짜를 기본으로 지정
    },
});

const Post = mongoose.model('Post',PostSchema);
export default Post;

몽구스를 이용해서 CRUD를 작성해보자.

// api/posts/posts.ctrl.js
import Post from '../../models/post';

// 포스트 추가
// POST /api/posts
export const write = async (ctx) => {
	const { title, body, tags } = ctx.request.body;
	const post = new Post({
		title,
		body,
		tags,
	});
	try {
		await post.save();
		ctx.body = post;
	} catch (e) {
		ctx.throw(500, e);
	}
};

// 포스트 목록 조회
// GET /api/posts
export const list = async (ctx) => {
	try {
		const posts = await Post.find().exec();
		ctx.body = posts;
	} catch (e) {
		ctx.throw(500, e);
	}
};

// 포스트 목록 삭제
// DELETE /api/posts
export const deleteList = async (ctx) => {
	try {
		await Post.deleteMany().exec();
		ctx.status = 204;
	} catch (e) {
		ctx.throw(500, e);
	}
};

// 특정 포스트 목록 조회
// GET /api/posts/:id
export const read = async (ctx) => {
	const { id } = ctx.params;
	try {
		const post = await Post.findById(id).exec();
		if (!post) {
			ctx.status = 404;
			return;
		}
		ctx.body = post;
	} catch (e) {
		ctx.throw(500, e);
	}
};
// 특정 포스트 제거
// DELETE /api/posts/:id
export const remove = async (ctx) => {
	const { id } = ctx.params;
	try {
		await Post.findByIdAndRemove(id).exec();
		ctx.status = 204;
	} catch (e) {
		ctx.throw(500, e);
	}
};

// 포스트 수정(특정 필드 변경)
// PATCH /api/posts/:id
export const update = async (ctx) => {
	const { id } = ctx.params;

	try {
		const post = await Post.findByIdAndUpdate(id, ctx.request.body, {
			new: true, //이 값을 설정하면 업데이트 된 데이터를 반환
			//false면 업데이트 되기 전의 데이터를 반환.
		}).exec();
		if (!post) {
			ctx.status = 404;
			return;
		}
		ctx.body = post;
	} catch (e) {
		ctx.throw(500, e);
	}
};

esm module

module의 node.js가 아닌 ECMAScript를 패키징하는 공식 표준 형식을 제공해준다. (require과 export가 아닌 import, export 사용이 가능)

yarn add esm

아래와 같이 기존의 메인 실행코드를 등록해서 사용하면 된다.

// index.js
require('esm')(module);
module.exports = require('./main.js');

최근에는 esm 모듈 없이도 사용이 가능하다!

package.json 파일에 아래와 같이 타입을 모듈로 지정해주면 require과 module.export대신 import export를 사용할 수 있다.

{
	...

	"type": "module"
}
profile
프론트엔드 개발자

0개의 댓글