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에서 정의되며 콜백을 인수로받습니다. 이 콜백에는 두 개의 인수가 있습니다.error 과 response. 그러면 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 문서를 읽어 보세요.