컴퓨터언어(271)
-
[REST API] 뿌시기 by Node.js & Mongoose
API라는 말을 처음 들은 때가, 아마 어느샌가 N사의 "지도 API"라는 단어가 흥하기 시작한 때였던 것 같다. 그때까지만 해도 API하면 생각나는 것은 그냥 "지도"였고, 그 지도 자체를 의미하는 프로그램인 줄 알았다. 하지만 더 알아갈수록 빙산의 일각이었음을 깨달았다. API란, 어떤 Web의 사용자인 클라이언트와 정보 제공자인 서버가 HTTP라는 약속된 언어로 통신할 때, 그 서버가 제공하는 메뉴판이라고 보면 된다. 레스토랑에서 다양한 음식을 메뉴판으로 제공하는 것과 마찬가지로, 사이트는 서버가 가지고 있는 홈페이지의 모습, 구성요소, 로그인정보 뿐 아니라 서버DB 내 특정 파일 등 다양한 정보를 URL로 제공하는 것이다. 즉 클라이언트는 해당 웹사이트에서 제공되는 페이지 등 정보를 보여달라고 U..
2020.05.14 -
[Mongoose] db.~.find() VS db.~.findOne()
결과 쿼리 비교 상황 find : 여러 {} 객체로 이루어진 [] 배열을 반환 findOne : 하나의 {} 객체를 반환 파라미터로 조건 쿼리가 없을 때 모든 Document들을 반환 모든 Document들 중 가장 첫 번째만 반환 파라미터로 조건 쿼리가 있으며, 해당 조건을 만족하는 Document가 여러 개 조건을 만족하는 Document를 반환 조건을 만족하는 Document 중 가장 첫번째만 반환 파라미터로 조건 쿼리가 있지만, 해당 조건을 만족하는 Document가 0개일 때 아무 일도 일어나지 않음 null 반환
2020.05.13 -
[Mongoose] Cannot set headers after they are sent to the client
이 에러는 node.js에서 GET 또는 POST 메서드와 관계된 것이다. 페이지를 로드할 때 우리는 콜백함수 내 response 인자로 redirect 또는 render 하게 된다. 하지만 IF 조건문 같이 분기가 확실히 되어야 하는 지점에서 두갈래길을 확실히 하지 않았다면, redirect와 render가 중복되는 불상사가 생기게 된다. 예를 들어, IF문의 조건이 참이어서 해당 구문 내 redirect()가 한번 실행되었다면, 그 Route를 담당하는 GET 또는 POST 메서드는 할 일을 다한 것이며, 또다른 redirect()나 render()가 해당 Route에서 실행되지 않도록 else if / else / return 키워드 등을 통해 구분해주어야 한다. 하지만 나는 else{}문 처리를 ..
2020.05.13 -
[Mongoose] 서로 다른 스키마 간 관계 설정 (Join)
SQL에 JOIN ON 이 있다면, NoSQL에는 스키마 이식이 있다. SQL에서 테이블을 정의할 때 자료형을 정의하듯이, NoSQL에서는 서로 관계를 맺고 싶은 스키마를 다른 스키마에 삽입하면 된다. const guitarSchema = new mongoose.Schema({ name: { type: String, required: [true, "how could it be noname?"] }, company: { type: String }, price: { type: Number, min: 1000, max: 10000 }, }); const customerSchema = new mongoose.Schema({ name: String, age: Number, favoriteGuitar: guitar..
2020.05.13 -
[Mongoose] Validation 유효성검사
스키마를 정의할 때 단순히 자료형만 주는 것이 아니라, 다시 {} 객체를 열어서 값의 범위나 필수여부를 지정할 수 있다. const guitarSchema = new mongoose.Schema({ name: String, company: String, price: Number, }); ▼ const guitarSchema = new mongoose.Schema({ name: { type: String, required: true }, company: { type: String }, price: { type: Number, min: 1000, max: 10000 }, }); *required를 배열로 처리하여 아래와 같이 입력하면 에러메시지를 커스텀화 할 수 있다. const guitarSchema = ..
2020.05.13 -
[Mongoose] MongoDB를 쉽게 사용할 수 있게 하는 npm - CRUD
*사전필수 : MongoDB를 설치해야 한다. Catalina 경험상 깔끔하고 빠른 설치는 Home Brew를 이용하자. https://github.com/mongodb/homebrew-brew mongodb/homebrew-brew The Official MongoDB Software Homebrew Tap. Contribute to mongodb/homebrew-brew development by creating an account on GitHub. github.com Create *한번 Create 또는 Insert를 한 후, node app.js를 통해 서버를 구동하면서 save()가 다시 호출되지 않도록 주석처리 유의하자. // npm install mongoose를 하고 require한다. ..
2020.05.13