Node.js
Node.js / Express.jsのMongoDBインテグレーション
サーチ…
前書き
MongoDBは、MEANスタックのおかげで、最も人気のあるNoSQLデータベースの1つです。 ExpressアプリケーションからのMongoデータベースとのインターフェースは、ちょっとした質問構文を理解すればすばやく簡単です。私たちはMongooseを使って私たちを助けます。
備考
詳細はこちらをご覧ください : http : //mongoosejs.com/docs/guide.html
MongoDBのインストール
npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development
サーバーファイル(通常index.jsまたはserver.jsという名前)
const express = require('express');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const mongoConnectString = 'http://localhost/database name';
mongoose.connect(mongoConnectString, (err) => {
if (err) {
console.log('Could not connect to the database');
}
});
マングースモデルの作成
const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;
const Article = new Schema({
title: {
type: String,
unique: true,
required: [true, 'Article must have title']
},
author: {
type: ObjectId,
ref: 'User'
}
});
module.exports = mongoose.model('Article, Article);
これを解剖しましょう。 MongoDBとMongooseはJSON(実際はBSONですが、ここでは無関係です)をデータ形式として使用しています。上には、タイピングを減らすためのいくつかの変数を設定しました。
私はnew Schema
を作成し、それを定数に割り当てます。これは単純なJSONです。各属性は、一貫性のあるスキーマを強化するのに役立つプロパティを持つ別のオブジェクトです。 Uniqueは、新しいインスタンスをデータベースに挿入して、明らかに一意にするよう強制します。これは、ユーザーがサービス上で複数のアカウントを作成するのを防ぐのに最適です。
必須は別のもので、配列として宣言されています。最初の要素はブール値で、2番目の要素は挿入または更新される値が存在しない場合はエラーメッセージです。
ObjectIdsは、モデル間の関係に使用されます。たとえば、「ユーザーには多くのコメントがあります。 ObjectIdの代わりに他の属性を使用することもできます。ユーザー名のような文字列は一例です。
最後に、APIルートで使用するためにモデルをエクスポートすると、スキーマにアクセスできます。
Mongoデータベースのクエリ
簡単なGETリクエスト。上記の例のモデルが./db/models/Article.js
ファイルにあるとします。
const express = require('express');
const Articles = require('./db/models/Article');
module.exports = function (app) {
const routes = express.Router();
routes.get('/articles', (req, res) => {
Articles.find().limit(5).lean().exec((err, doc) => {
if (doc.length > 0) {
res.send({ data: doc });
} else {
res.send({ success: false, message: 'No documents retrieved' });
}
});
});
app.use('/api', routes);
};
このエンドポイントにHTTPリクエストを送信することで、データベースからデータを取得できるようになりました。しかし、いくつかの重要な事柄:
- 限界はそれがどんなものかを正確に示します。私は5つの文書を戻しているだけです。
- Leanは生のBSONから何かを取り除き、複雑さとオーバーヘッドを減らします。不要です。しかし、便利です。
- 使用する場合は
find
のではなく、findOne
、ことを確認してdoc.length
これが0よりも大きいfind
常に配列を返します。それは長さがチェックされていない限り、その空の配列は、あなたのエラーを処理しません。 - 私は個人的にその形式でエラーメッセージを送信するのが好きです。ニーズに合わせて変更してください。返されたドキュメントでも同じです。
- この例のコードは、エクスプレス・サーバー上に直接置くのではなく、別のファイルに置いたことを前提として書かれています。サーバーでこれを呼び出すには、サーバーコードに次の行を含めます。
const app = express();
require('./path/to/this/file')(app) //