ExpressJS-データベース

私たちはリクエストを受け取り続けますが、結局どこにも保存されません。データを保存するためのデータベースが必要です。このために、と呼ばれるNoSQLデータベースを利用しますMongoDB

Mongoをインストールして読むには、このリンクをたどってください。

ExpressでMongoを使用するには、ノード用のクライアントAPIが必要です。複数のオプションがありますが、このチュートリアルでは、マングースに固執します。マングースはdocument ModelingMongoDBのノードで。ドキュメントモデリングでは、Model (のように class ドキュメント指向プログラミングで)、そして私たちは documents このモデルを使用して(私たちが作成するように) documents of a classOOPで)。すべての処理はこれらの「ドキュメント」に対して実行され、最後にこれらのドキュメントをデータベースに書き込みます。

マングースの設定

Mongoをインストールしたので、他のノードパッケージをインストールしたのと同じ方法でMongooseをインストールしましょう-

npm install --save mongoose

mongooseの使用を開始する前に、Mongoシェルを使用してデータベースを作成する必要があります。新しいデータベースを作成するには、ターミナルを開いて「mongo」と入力します。Mongoシェルが起動します。次のコードを入力してください-

use my_db

新しいデータベースが作成されます。mongoシェルを開くと、デフォルトで「test」dbになり、上記と同じコマンドを使用してデータベースに変更する必要があります。

マングースを使用するには、マングースが必要になります 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);

上記のコードは、人のスキーマを定義し、Mongooseモードを作成するために使用されます Person

ドキュメントの保存

次に、新しいhtmlフォームを作成します。このフォームは、人の詳細を取得してデータベースに保存するのに役立ちます。フォームを作成するには、という新しいビューファイルを作成します。person.pug 次の内容のviewsディレクトリ内-

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

ドキュメントの取得

マングースはドキュメントを取得するための多くの機能を提供しますが、そのうちの3つに焦点を当てます。これらの関数はすべて、最後のパラメーターとしてコールバックも受け取ります。save関数と同様に、引数はエラーと応答です。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);

ドキュメントの更新

マングースは、ドキュメントを更新するための3つの機能を提供します。機能は以下のとおりです。

Model.update(条件、更新、コールバック)

この関数は、条件を受け取り、入力としてオブジェクトを更新し、コレクション内の条件に一致するすべてのドキュメントに変更を適用します。たとえば、次のコードは、すべての個人文書の国籍「アメリカ人」を更新します-

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

Model.findOneAndUpdate(条件、更新、コールバック)

クエリに基づいて1つのドキュメントを検索し、2番目の引数に従ってそれを更新します。また、最後の引数としてコールバックを取ります。関数を理解するために次の例を実行してみましょう

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

Model.findByIdAndUpdate(id、updates、callback)

この関数は、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を作成したIDに置き換えます) people)−

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

これにより、ルートで提供されたIDに関連付けられたドキュメントが上記の詳細で更新されます。

ドキュメントの削除

カバーしました Create, Read そして Update、今度はマングースをどのように使用できるかを見ていきます Deleteドキュメント。ここには、更新とまったく同じように3つの関数があります。

Model.remove(condition、[callback])

この関数は、条件オブジェクトを入力として受け取り、条件に一致するすべてのドキュメントを削除します。たとえば、20歳のすべての人を削除する必要がある場合は、次の構文を使用します-

Person.remove({age:20});

Model.findOneAndRemove(condition、[callback])

この関数は、 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アプリケーションを作成する方法をまとめました。マングースをさらに詳しく調べるには、APIドキュメントをお読みください。