Koa.js-데이터베이스

요청을 받고 있지만 어디에도 저장하지 않습니다. 데이터를 저장할 데이터베이스가 필요합니다. 우리는 유명한 NoSQL 데이터베이스를 사용할 것입니다.MongoDB. Mongo를 설치하고 읽으려면 이 링크로 이동하십시오.

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

몽구스 설정

이제 Mongo가 설치되었으므로 다른 노드 패키지를 설치하는 것과 같은 방법으로 mongoose를 설치하겠습니다.

$ npm install --save mongoose

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

use my_db

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

mongoose를 사용하려면 app.js 파일에서 필요로 한 다음 mongodb : // localhost에서 실행되는 mongod 서비스에 연결합니다.

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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

app.use(_.routes());
app.listen(3000);

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

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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.use(_.routes());
app.listen(3000);

위의 코드는 사람의 스키마를 정의하고 몽구스 모델을 만드는 데 사용됩니다. 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

또한이 문서를 렌더링하기 위해 index.js에 새로운 get 경로를 추가합니다.

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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);

_.get('/person', getPerson);

function *getPerson(next){
   this.render('person');
   yield next;
}

app.use(_.routes());
app.listen(3000);

localhost : 3000 / person으로 이동하여 양식이 올바르게 표시되는지 확인하십시오. 이것은 단지 UI 일뿐 아직 작동하지 않습니다. 이것이 우리 양식의 모습입니다.

이제이 요청을 처리 할 '/ person'에 포스트 라우트 핸들러를 정의합니다.

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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);

_.post('/person', createPerson);

function *createPerson(next){
   var self = this;
   var personInfo = self.request.body; //Get the parsed information
   
   if(!personInfo.name || !personInfo.age || !personInfo.nationality){
      self.render(
         'show_message', {message: "Sorry, you provided wrong info", type: "error"});
   } else {
      var newPerson = new Person({
         name: personInfo.name,
         age: personInfo.age,
         nationality: personInfo.nationality
      });
      yield newPerson.save(function(err, res) {
         if(err)
            self.render('show_message', 
               {message: "Database error", type: "error"});
         else
            self.render('show_message', 
               {message: "New person added", type: "success", person: personInfo});
      });
   }
}

app.use(_.routes());
app.listen(3000);

위 코드에서 빈 필드가 수신되거나 필드가 수신되지 않으면 오류 응답을 보냅니다. 그러나 올바른 형식의 문서를 받으면 Person 모델에서 newPerson 문서를 만들고 다음을 사용하여 DB에 저장합니다.newPerson.save()함수. 이것은 mongoose에서 정의되며 콜백을 인수로받습니다. 이 콜백에는 두 개의 인수가 있습니다.errorresponse. 그러면 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!

다음은 성공적으로 양식 (show_message.pug)을 제출했을 때받는 응답입니다.

이제 사람을 만드는 인터페이스가 생겼습니다!

문서 검색

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

세 가지 기능은-

Model.find (조건, 콜백)

이 함수는 조건 개체의 필드와 일치하는 모든 문서를 찾습니다. Mongo에서 사용되는 동일한 연산자는 mongoose에서도 작동합니다. 예를 들어, 이것은 개인 컬렉션에서 모든 문서를 가져옵니다.

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

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

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

또한 필요한 프로젝션, 즉 필요한 필드를 제공 할 수도 있습니다. 예를 들어,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 koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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);

_.get('/people', getPeople);
function *getPeople(next){
   var self = this;
   
   yield Person.find(function(err, response){
      self.body = response;
   });
}
app.use(_.routes());
app.listen(3000);

문서 업데이트

Mongoose는 문서를 업데이트하는 세 가지 기능을 제공합니다.

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);
   });

사람들을 업데이트하는 경로를 만들어 보겠습니다. 이것은 매개 변수로 id와 페이로드의 세부 사항이있는 PUT 경로입니다.

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();
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);

_.put('/people/:id', updatePerson);

function *updatePerson() {
   var self = this;
   yield Person.findByIdAndUpdate(self.params.id, 
      {$set: {self.request.body}}, function(err, response){
      
      if(err) {
         self.body = {
            message: "Error in updating person with id " + self.params.id};
      } else {
         self.body = response;
      }
   });
}

app.use(_.routes());
app.listen(3000);

이 경로를 테스트하려면 터미널에 다음을 입력하십시오 (ID를 생성 된 사람의 ID로 대체).

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

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

문서 삭제

우리는 Create, Read 및 Update, 이제 mongoose를 사용하여 문서를 삭제하는 방법을 살펴 보겠습니다. 여기에는 업데이트와 똑같은 세 가지 기능이 있습니다.

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

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

Person.remove({age:20});

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

이 기능은 single, 조건 개체에 따라 가장 관련성이 높은 문서. 예를 들면

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

Model.findByIdAndRemove (id, [콜백])

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

Person.findByIdAndRemove("507f1f77bcf86cd799439011");

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

var koa = require('koa');
var _ = require('koa-router')();
var app = koa();

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);

_.delete('/people/:id', deletePerson);
function *deletePerson(next){
   var self = this;
   yield Person.findByIdAndRemove(self.params.id, function(err, response){
      if(err) {
         self.body = {message: "Error in deleting record id " + self.params.id};
      } else {
         self.body = {message: "Person with id " + self.params.id + " removed."};
      }
   });
}

app.use(_.routes());
app.listen(3000);

이를 테스트하려면 다음 curl 명령을 사용하십시오.

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

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

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

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