ExpressJS-데이터베이스

우리는 계속 요청을 받고 있지만 결국 어디에도 저장하지 않습니다. 데이터를 저장할 데이터베이스가 필요합니다. 이를 위해 우리는 NoSQL 데이터베이스를 사용합니다.MongoDB.

Mongo를 설치하고 읽으려면 이 링크를 따르십시오 .

Mongo를 Express와 함께 사용하려면 노드 용 클라이언트 API가 필요합니다. 우리에게는 여러 가지 옵션이 있지만이 튜토리얼에서는 mongoose 를 고수 할 것 입니다. 몽구스는document ModelingMongoDB 용 Node. 문서 모델링을 위해 우리는Model (매우 class 문서 지향 프로그래밍에서), 그리고 우리는 documents 이 모델을 사용하여 documents of a classOOP에서). 모든 처리는 이러한 "문서"에서 수행되고 마지막으로 데이터베이스에 이러한 문서를 작성합니다.

Mongoose 설정

이제 Mongo를 설치 했으므로 다른 노드 패키지를 설치할 때와 같은 방법으로 Mongoose를 설치하겠습니다.

npm install --save mongoose

mongoose를 사용하기 전에 Mongo 셸을 사용하여 데이터베이스를 만들어야합니다. 새 데이터베이스를 생성하려면 터미널을 열고 "mongo"를 입력하십시오. Mongo 셸이 시작되고 다음 코드를 입력합니다.

use my_db

새 데이터베이스가 생성됩니다. mongo 셸을 열 때마다 기본적으로 "test"db로 설정되며 위와 동일한 명령을 사용하여 데이터베이스로 변경해야합니다.

Mongoose를 사용하려면 index.js 파일에 연결 한 다음 mongodb 서비스 실행 mongodb://localhost.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

이제 앱이 데이터베이스에 연결되었으므로 새 모델을 생성하겠습니다. 이 모델은 데이터베이스에서 컬렉션 역할을합니다. 새 모델을 생성하려면 경로를 정의하기 전에 다음 코드를 사용하십시오.

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});
var Person = mongoose.model("Person", personSchema);

위의 코드는 사람의 스키마를 정의하고 몽구스 모드를 만드는 데 사용됩니다. Person.

문서 저장

이제 새 html 양식을 작성합니다. 이 양식은 사람의 세부 정보를 얻고이를 데이터베이스에 저장하는 데 도움이됩니다. 양식을 작성하려면 다음과 같은 새보기 파일을 작성하십시오.person.pug 다음 내용이있는 뷰 디렉토리에서-

html
head
   title Person
   body
      form(action = "/person", method = "POST")
      div
         label(for = "name") Name: 
         input(name = "name")
      br
      div
         label(for = "age") Age: 
         input(name = "age")
      br
      div
         label(for = "nationality") Nationality: 
         input(name = "nationality")
      br
      button(type = "submit") Create new person

또한 추가 new get routeindex.js 이 문서를 렌더링하려면-

app.get('/person', function(req, res){
   res.render('person');
});

이동 "localhost:3000/person"양식이 올바른 출력을 표시하는지 확인합니다. 이것은 UI 일 뿐이며 아직 작동하지 않습니다. 다음 스크린 샷은 양식이 어떻게 표시되는지 보여줍니다.

이제 포스트 라우트 핸들러를 '/person' 이 요청을 처리 할

app.post('/person', function(req, res){
   var personInfo = req.body; //Get the parsed information
   
   if(!personInfo.name || !personInfo.age || !personInfo.nationality){
      res.render('show_message', {
         message: "Sorry, you provided worng info", type: "error"});
   } else {
      var newPerson = new Person({
         name: personInfo.name,
         age: personInfo.age,
         nationality: personInfo.nationality
      });
		
      newPerson.save(function(err, Person){
         if(err)
            res.render('show_message', {message: "Database error", type: "error"});
         else
            res.render('show_message', {
               message: "New person added", type: "success", person: personInfo});
      });
   }
});

위 코드에서 빈 필드가 수신되거나 필드가 수신되지 않으면 오류 응답을 보냅니다. 그러나 올바른 형식의 문서를 받으면newPerson Person 모델에서 문서를 작성하고 다음을 사용하여 DB에 저장합니다. newPerson.save()함수. 이것은 Mongoose에서 정의되며 콜백을 인수로받습니다. 이 콜백에는 오류와 응답이라는 2 개의 인수가 있습니다. 이러한 인수는show_message 전망.

이 경로의 응답을 표시하려면 show_message전망. 다음 코드로 새보기를 만듭니다-

html
   head
      title Person
   body
      if(type == "error")
         h3(style = "color:red") #{message}
      else
         h3 New person, 
            name: #{person.name}, 
            age: #{person.age} and 
            nationality: #{person.nationality} added!

성공적으로 제출하면 다음과 같은 응답을 받게됩니다. form(show_message.pug)

이제 생성 할 인터페이스가 있습니다. persons.

문서 검색

Mongoose는 문서 검색을위한 많은 기능을 제공하며 그중 3 가지에 초점을 맞출 것입니다. 이러한 모든 함수는 콜백을 마지막 매개 변수로 사용하며 저장 함수와 마찬가지로 해당 인수는 오류 및 응답입니다. 세 가지 기능은 다음과 같습니다-

Model.find (조건, 콜백)

이 함수는 조건 개체의 필드와 일치하는 모든 문서를 찾습니다. Mongo에서 사용되는 동일한 연산자는 mongoose에서도 작동합니다. 예를 들면

Person.find(function(err, response){
   console.log(response);
});

이것은 그 사람의 컬렉션에서 모든 문서를 가져옵니다.

Person.find({name: "Ayush", age: 20}, 
   function(err, response){
      console.log(response);
});

필드 이름이 "Ayush"이고 나이가 20 인 모든 문서를 가져옵니다.

또한 필요한 프로젝션, 즉 필요한 필드를 제공 할 수도 있습니다. 예를 들어,names 사람의 nationality이다 "인도" 우리는 사용 -

Person.find({nationality: "Indian"}, "name", function(err, response){
   console.log(response);
});

Model.findOne (조건, 콜백)

이 함수는 항상 가장 관련성이 높은 단일 문서를 가져옵니다. 다음과 동일한 인수가 있습니다.Model.find().

Model.findById (id, callback)

이 함수는 _id(mongo에 의해 정의 됨) 첫 번째 인수, 선택적 프로젝션 문자열 및 응답을 처리하기위한 콜백. 예를 들면

Person.findById("507f1f77bcf86cd799439011", function(err, response){
   console.log(response);
});

이제 모든 사람 기록을 볼 수있는 경로를 만들겠습니다.

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.get('/people', function(req, res){
   Person.find(function(err, response){
      res.json(response);
   });
});

app.listen(3000);

문서 업데이트

Mongoose는 문서를 업데이트하는 3 가지 기능을 제공합니다. 기능은 아래에 설명되어 있습니다-

Model.update (조건, 업데이트, 콜백)

이 함수는 조건을 취하고 개체를 입력으로 업데이트하고 컬렉션의 조건과 일치하는 모든 문서에 변경 사항을 적용합니다. 예를 들어, 다음 코드는 모든 Person 문서에서 "American"국적을 업데이트합니다.

Person.update({age: 25}, {nationality: "American"}, function(err, response){
   console.log(response);
});

Model.findOneAndUpdate (조건, 업데이트, 콜백)

쿼리를 기반으로 한 문서를 찾고 두 번째 인수에 따라 업데이트합니다. 또한 마지막 인수로 콜백을받습니다. 함수를 이해하기 위해 다음 예제를 수행하겠습니다.

Person.findOneAndUpdate({name: "Ayush"}, {age: 40}, function(err, response) {
   console.log(response);
});

Model.findByIdAndUpdate (id, 업데이트, 콜백)

이 함수는 ID로 식별되는 단일 문서를 업데이트합니다. 예를 들면

Person.findByIdAndUpdate("507f1f77bcf86cd799439011", {name: "James"}, 
   function(err, response){
      console.log(response);
});

이제 사람들을 업데이트하는 경로를 만들겠습니다. 이것은PUT ID를 매개 변수로 사용하고 페이로드의 세부 사항을 사용합니다.

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.put('/people/:id', function(req, res){
   Person.findByIdAndUpdate(req.params.id, req.body, function(err, response){
      if(err) res.json({message: "Error in updating person with id " + req.params.id});
      res.json(response);
   });
});

app.listen(3000);

이 경로를 테스트하려면 터미널에 다음을 입력하십시오 (ID를 생성 된 people) −

curl -X PUT --data "name = James&age = 20&nationality = American
"http://localhost:3000/people/507f1f77bcf86cd799439011

위의 세부 정보로 경로에 제공된 ID와 관련된 문서가 업데이트됩니다.

문서 삭제

우리는 Create, ReadUpdate, 이제 Mongoose를 사용하여 Delete서류. 여기에는 업데이트와 똑같은 3 가지 기능이 있습니다.

Model.remove (조건, [콜백])

이 함수는 조건 개체를 입력으로 사용하고 조건과 일치하는 모든 문서를 제거합니다. 예를 들어 20 세의 모든 사람을 제거해야하는 경우 다음 구문을 사용합니다.

Person.remove({age:20});

Model.findOneAndRemove (조건, [콜백])

이 기능은 single, 조건 개체에 따라 가장 관련성이 높은 문서. 동일한 내용을 이해하기 위해 다음 코드를 실행 해 보겠습니다.

Person.findOneAndRemove({name: "Ayush"});

Model.findByIdAndRemove (id, [콜백])

이 함수는 ID로 식별되는 단일 문서를 제거합니다. 예를 들면

Person.findByIdAndRemove("507f1f77bcf86cd799439011");

이제 데이터베이스에서 사람을 삭제하는 경로를 만들어 보겠습니다.

var express = require('express');
var app = express();

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema = mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person = mongoose.model("Person", personSchema);

app.delete('/people/:id', function(req, res){
   Person.findByIdAndRemove(req.params.id, function(err, response){
      if(err) res.json({message: "Error in deleting record id " + req.params.id});
      else res.json({message: "Person with id " + req.params.id + " removed."});
   });
});

app.listen(3000);

출력을 확인하려면 다음 curl 명령을 사용하십시오.

curl -X DELETE http://localhost:3000/people/507f1f77bcf86cd799439011

이것은 다음 메시지를 생성하는 주어진 ID를 가진 사람을 제거합니다-

{message: "Person with id 507f1f77bcf86cd799439011 removed."}

이것은 MongoDB, Mongoose 및 Express를 사용하여 간단한 CRUD 애플리케이션을 만드는 방법을 요약합니다. Mongoose를 더 자세히 살펴 보려면 API 문서를 읽어 보세요.