【React.js Node.js Express MongoDBでwebアプリ】③MongoDBとMongooseの設定

こんにちは、Mako(@makokamiya)です。
今回は、こちらのチュートリアルを参考に、React.js + Node.js + Express + MongoDB(MERN stack)の構成でwebアプリを作ろうと思うので、調べた内容を記録していきます!
前回までは、Node.jsを新規作成し、モジュールをインストールまでを行い、Expressの設定とHello,World!までをまとめました。
今回は、こちらのチュートリアルの、バックエンドNode.js, Express & MongoDb: Build a CRUD Rest Api exampleに沿って、MongoDBとmongoseの設定をまとめます。
MongoDBとmongoseの設定
app フォルダーの中にconfig フォルダーを作成し、その中に db.config.js ファイルを作成します。
// MongoDBのurlを設定する。
module.exports = {
url: "mongodb://localhost:27017/<dbname>"
};
app フォルダーの中にmodel フォルダーを作成し、その中に index.js ファイルを作成します。
(user.model.js ファイルは後に作成します。)
※参考にしたチュートリアルではtutorialモデルを作成していますが、今回作るアプリではuserモデルを作成しています。置き換えてお読みください。
// db.config.jsの読み込み
const dbConfig = require("../config/db.config.js");
// mongooseの読み込み
const mongoose = require("mongoose");
const db = {};
db.mongoose = mongoose;
db.url = dbConfig.url;
db.users = require("./user.model.js")(mongoose);
module.exports = db;
server.js に下記の接続コードを追記します。
const db = require("./app/models");
db.mongoose.connect(db.url, {
useNewUrlParser: true,
useUnifiedTopology: true
})
.then(() => {
console.log("Connected to the database!");
})
.catch(err => {
console.log("Cannot connect to the database!", err);
process.exit();
});
用語・コードの理解
mongoose.connect();
mongoose.connect()
メソッドを使って、MongoDBに接続します。
以下のように書きます。urlは必須です。
mongoose.connect(uri, options);
urlの部分は以下のように書きます。
"mongodb://localhost:27017/dbname"
dbnameに書いた名前がデータベース名として作成されます。ちなみに、27017がMongoDBのデフォルトポートです。
Promiseとは
Promiseは非同期処理を抽象化したオブジェクトとそれを操作する仕組みのことをいいます。
https://azu.github.io/promises-book/#what-is-promise
(略)
非同期処理を抽象化したpromiseオブジェクトというものを用意し、 そのpromiseオブジェクトに対して成功時の処理と失敗時の処理の関数を登録するようにして使います。
また、チュートリアルでは、mongoose.Promise = global.Promise;
が書かれていますが、Mongoose5からデフォルトで対応されているので書かなくていいそうです。
Mongoose 5 uses native promises by default,
https://azu.github.io/promises-book/#what-is-promise
参考:すべての新米フロントエンドエンジニアに読んでほしい50の資料 – 非同期処理を知る
参考:JavaScript Promiseの本 – 1.1. What Is Promise
参考:Promises in Mongoose – The mongoose.Promise Property
(JavaScript Promiseや非同期処理について学ぼうとすると、時間がかかりそうなので、今回はここまでにしておきます。。( ᵕ ᵕ̩̩ )
まとめ
Promiseについては、もっと深く学ばないといけないなと実感しました。
次回は、モデル・コントローラー、ルーティング をまとめます!
最後まで読んでくれて、ありがとうございました!
何か間違ってるところなどありましたら、ぜひコメントで教えてください。
参考チュートリアル
フルスタック:React.js + Node.js + Express + MongoDB example: MERN stack CRUD App
– フロントエンド:React Hooks CRUD example with Axios and Web API
– バックエンド:Node.js, Express & MongoDb: Build a CRUD Rest Api example