express+mongo:CRUD
* 본 게시글은 작성자가 기존 공부 내용을 복습하고 새로운 프로젝트를 진행하는 기록을 위함입니다. 오류 지적은 언제나 환영합니다. 감사합니다.
* 혹시나 제가 공부하는 과정을 따라서 실습해 볼 분은 제가 진행한 순서대로 따라오면 될 것 같습니다. 현재까지 아래의 순서를 따릅니다.
https://doompa.tistory.com/308
[Node.js] express 시작하기 (node.js 다운로드, npm, express)
제목 목차 Node.Js와 Express란 Node.Js 시작하기 미들웨어함수 Node.js - express를 이용하여 만든 웹사이트를 호스팅하는 과정에서 에러가 발생하였다. fly.io를 이용했고, fly.io의 커뮤니티를 샅샅히 뒤진
doompa.tistory.com
https://doompa.tistory.com/309
[Node.js] express + mongoDB 데이터 연동//CRUD작업
express+mongo:CRUD * 본 게시글은 작성자가 기존 공부 내용을 복습하고 새로운 프로젝트를 진행하는 기록을 위함입니다. 오류 지적은 언제나 환영합니다. 감사합니다. 목차 4가지 메서드 몽고DB와 Mong
doompa.tistory.com
이번에는 몽고DB를 express와 연결해 생성 조회 삭제하는 간단한 예제를 구현한다.
이 과정에서 내가 추후 기억하고자 하는 지식이 (대략적으로) 기록되어 있다.
HTTP Method 네 가지
REST란?
REST API란 REST의 특징을 지키면서 API를 제공하는 것을 의미한다. 여기서 REST란 REpresentational State Transfer의 약자이다. 이는 HTTP 프로토콜에 있는 Method를 활용한 아키텍처 스타일이다.
HTTP Method 이름 | 수행하는 동작 |
GET | 조회 |
POST | 생성 |
PUT / PATCH | 수정 |
DELETE | 삭제 |
이번에는 이 GET/POST/PUT/DELETE 동작을 구현하기 위하여 npm에서 method-override모듈을 사용한다.
https://www.npmjs.com/package/method-override
method-override
Override HTTP verbs. Latest version: 3.0.0, last published: 4 years ago. Start using method-override in your project by running `npm i method-override`. There are 1366 other projects in the npm registry using method-override.
www.npmjs.com
해당 모듈은 PUT, DELETE와 같은 것을 지원해주지 않는 곳에서도 해당 동작을 수행 할 수 있게 도와준다.
작업하고자 하는 폴더의 터미널에서 아래 명령어를 입력한다.
npm i method-override
app.js파일에
app.use(methodOverride('_method'))
일반적으로 데이터를 보내기 위해 html의 form태그를 이용하게 되는데, PUT과 DELETE(일반적으로 수정 삭제)를 사용할 경우 form의 method속성에 method="post"로 사용하게 된다.
내부적으로는 이 post와 delete가 일종의 가짜라고 한다. 그래서 보낸 정보를 .delete나 .post메서드로 받기 위해 action의 url주소 뒤에 ?_method=DELETE 혹은?_method=POST을 붙이면 정상 작동한다.
예시
몽고DB와 Mongoose
몽고 DB를 연결한다. 몽고DB를 Node.JS에서 사용하기 위해 Mongoose를 사용할 것이다.
1. 몽고 DB다운로드
https://www.mongodb.com/try/download/community-kubernetes-operator
Try MongoDB Community Edition
Try MongoDB Community Edition on premise non-relational database including the Community Server and Community Kubernetes Operator for your next big project!
www.mongodb.com
2. Mongoose다운로드
터미널에 아래와 같이 입력한다.
npm i mongoose
https://www.npmjs.com/package/mongoose
mongoose
Mongoose MongoDB ODM. Latest version: 6.8.2, last published: 9 days ago. Start using mongoose in your project by running `npm i mongoose`. There are 13183 other projects in the npm registry using mongoose.
www.npmjs.com
이후 models라는 새로운 폴더 안에 cafe.js라는 파일을 만든다. 이곳에서 mongoose를 이용한 모델을 생성할 것이다.
카페하면 무엇이 있어야 할까? 시작으로 간단하게 카페이름, 위치, 메뉴 정도만 구성하도록 하겠다.
/models/cafe.js
Views 생성
간단하게 몽고DB와 몽구스를 사용하기 위해 홈페이지와 create를 위한 페이지, 그리고 그것을 모두 보여주기 위한 페이지 세 개를 만든다. Views 폴더를 만들고 그 안에 세 개의 ejs파일을 만든다.
npm i ejs
https://www.npmjs.com/package/ejs
ejs
Embedded JavaScript templates. Latest version: 3.1.8, last published: 8 months ago. Start using ejs in your project by running `npm i ejs`. There are 11821 other projects in the npm registry using ejs.
www.npmjs.com
app.set('views', path.join(__dirname, 'views'));app.set('view engine', 'ejs'); : 뷰 엔진으로 ejs를 사용하겠다는 의미이다.
app.set('views', path.join(__dirname, 'views')); // 기본 경로로 __dirname + views 이름의 폴더를 사용하겠다는 의미이다. 이렇게 하여 후에 경로를 앞에서부터 접근하지 않고 바로 views 폴더에 접근 할 수 있다.
이제 할 작업은 Views폴더 내에 post동작을 하는 form을 넣을 것이다.이를 위해서는 form의 name속성에 값을 부여하면 된다. 즉, 데이터가 name속성에 입력한 대로 전달될 것이다.
문제는 어떻게, 이다. 이후 post메서드로 해당 값을 받기 위해서는 req.body를 읽어야한다. 문제는 express에서 body를 읽어오기 위해서는 body-parser라는 모듈을 추가로 설치하여야한다.(최신 버전들은 기본적으로 내장되어 있을 것)
사용을 위해 app.js에 아래 한 줄을 입력한다.
*주의 : body-parser은 오직 json과 unincoded데이터만을 다룬다. 따라서 input의 속성 중 enctype을 multipart/form-data로 주면 제대로 작동하지 않는다.
views/cafe.ejs
*for in문과 for of문의 차이 : for in 문은 key값의 value에 접근 할 수 없지만 for of는 가능하다. 기타 차이점들이 있지만, 이번에는 이 부분이 가장 중요하다.
views/createCafe.ejs
views/home.ejs
최종
app.js
최종적으로 데이터를 쓰고(create), 읽고(read), 삭제(delete)하는 코드를 작성하였다. 이것을 발전시켜서 최종적인 프로젝트를 만들도록 하겠다.



실행은 터미널에 mongod(mongod 오류가 뜨면 mongod --ipv6 시도)를 친 후 실행중인 상태에서, node app.js를 하면 된다. 그럼 localhost:3000에서 웹이 실행 될 것이다.
'컴퓨터 > 웹 : JS' 카테고리의 다른 글
[Node.js](개인 프로젝트)부트스트랩 디자인 + 몽고DB 배열 건드려보기 + 동적으로 태그 생성 (1) | 2023.01.27 |
---|---|
[JS]객체 배열에서 특정 요소 찾기(find, findIndex, filter 함수)//객체 배열 처리 (0) | 2023.01.11 |
[Node.js] express 시작하기 (node.js 다운로드, npm, express) (0) | 2023.01.06 |
[Node.js] 해시의 이해, 해시로 비밀번호 생성 (0) | 2022.11.28 |
[JS]자바스크립트 객체 정리/변수 키값 (0) | 2022.11.11 |
댓글