Expressjs-database
ExpressJS-データベース
リクエストを受信し続けますが、どこにも保存しません。 データを保存するデータベースが必要です。 このために、 MongoDB と呼ばれるNoSQLデータベースを使用します。
Mongoをインストールして読むには、リンク:/mongodb/mongodb_environment [this link。]
ExpressでMongoを使用するには、ノード用のクライアントAPIが必要です。 複数のオプションがありますが、このチュートリアルでは、http://mongoosejs.com/[mongoose]に固執します。 Mongooseは、MongoDBのノードでの*ドキュメントモデリング*に使用されます。 ドキュメントモデリングの場合、 Model (ドキュメント指向プログラミングの class に似ています)を作成し、このモデルを使用して documents を作成します(OOPで* classのドキュメント*を作成するように)。 すべての処理はこれらの「ドキュメント」で行われ、最後にこれらのドキュメントをデータベースに書き込みます。
Mongooseのセットアップ
Mongoをインストールしたので、他のノードパッケージをインストールしたのと同じ方法でMongooseをインストールしましょう-
npm install --save mongoose
mongooseの使用を開始する前に、Mongoシェルを使用してデータベースを作成する必要があります。 新しいデータベースを作成するには、ターミナルを開いて「mongo」と入力します。 Mongoシェルが起動します、次のコードを入力してください-
use my_db
新しいデータベースが作成されます。 mongoシェルを開くたびに、デフォルトで「test」dbになり、上記と同じコマンドを使用してデータベースに変更する必要があります。
Mongooseを使用するには、 index.js ファイルでそれを要求し、 mongodb://localhost で実行されている mongodb サービスに接続します。
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 Mode Person を作成するために使用されます。
ドキュメントを保存する
次に、新しいhtmlフォームを作成します。このフォームは、個人の詳細を取得してデータベースに保存するのに役立ちます。 フォームを作成するには、viewsディレクトリに次の内容の 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 に new get route を追加して、このドキュメントをレンダリングします-
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});
});
}
});
上記のコードで、空のフィールドを受信した場合、またはフィールドを受信しなかった場合、エラー応答を送信します。 しかし、整形式のドキュメントを受け取ったら、Personモデルから newPerson ドキュメントを作成し、* newPerson.save()関数を使用してDBに保存します。 これは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つに焦点を当てます。 これらの関数はすべて、最後のパラメーターとしてコールバックを使用し、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のすべてのドキュメントが取得されます。
必要な投影、つまり必要なフィールドを提供することもできます。 たとえば、*国籍*が_ "Indian" _である人々の*名前*のみが必要な場合、次を使用します-
Person.find({nationality: "Indian"}, "name", function(err, response){
console.log(response);
});
Model.findOne(条件、コールバック)
この関数は、常に単一の最も関連性の高いドキュメントを取得します。 * Model.find()*とまったく同じ引数を持ちます。
Model.findById(id、コールバック)
この関数は、最初の引数として _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.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、更新、コールバック)
この関数は、IDで識別される単一のドキュメントを更新します。 例えば、
Person.findByIdAndUpdate("507f1f77bcf86cd799439011", {name: "James"},
function(err, response){
console.log(response);
});
人々を更新するためのルートを作成しましょう。 これは、パラメーターとしてIDを持ち、ペイロードに詳細を持つ PUT ルートになります。
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 のidに置き換えます)-
curl -X PUT --data "name = James&age = 20&nationality = American
"http://localhost:3000/people/507f1f77bcf86cd799439011
これにより、ルートで提供されたIDに関連付けられたドキュメントが上記の詳細で更新されます。
ドキュメントを削除する
*Create、Read* 、および *Update* について説明しましたが、Mongooseを使用してドキュメントを*削除*する方法を確認します。 ここには、更新とまったく同じ3つの関数があります。
Model.remove(条件、[コールバック])
この関数は、条件オブジェクトを入力として受け取り、条件に一致するすべてのドキュメントを削除します。 たとえば、20歳のすべての人を削除する必要がある場合は、次の構文を使用します-
Person.remove({age:20});
Model.findOneAndRemove(条件、[コールバック])
この関数は、条件オブジェクトに応じて、最も関連性の高いドキュメントを削除します。 同じことを理解するために、次のコードを実行してみましょう。
Person.findOneAndRemove({name: "Ayush"});
Model.findByIdAndRemove(id、[callback])
この関数は、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の詳細については、http://mongoosejs.com [APIドキュメント]をご覧ください。