0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.js,Expressメモ③

Last updated at Posted at 2019-04-14

今更Node.jsとExpressかよ!と突っ込まれるかもしれません。こんにちは。
rete.jsを使いたいためにExpressのチュートリアルを進めていますがどう活きるかまだわかりません。

今回はこちらのPart3をやります。
https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/mongoose

Part3にしてデータベース。楽しみです。

データベースの選定

Expressも他のwebフレームワークと同様にいろいろ選択できるみたいですね。
そのまま使うかODM/ORMを選択も必要そうです。
推奨としては速度優先じゃないならODM/ORMを使った方が開発・保守コストを削減できるから
ODM/ORMの方がいいんじゃないとのこと。
個人的にも速度を犠牲にしても拡張性が欲しいのでそちらを選択したいところです。

NPMパッケージでは多数のODM/ORMを利用できるようです。

チュートリアルの選択はMongooseというもので、書いている時点で最も人気のある
ODMのようです。
データベースはMongoDBを使うとのこと。
NoSQL系のデータベースは触ったことがないのでそういう意味でも楽しみです。

MongooseとMongoDB

Nodeコミュニティでは特に人気のある組み合わせみたいです。
それは使用感がJsonに似ていて親しみやすいから、ということみたいですね。
インストール
mongoose
npm install mongoose

mongoDB
https://www.mongodb.com/download-center/community
ローカルインストールとクラウド(Azure, GCP, AWS)があります。
クラウド版使いたいなぁと思いつつとりあえずwindows版を。

モデル設計

チュートリアルでは書籍のライブラリアプリを作成するようです。
そのために必要なデータの洗い出しから始まっています。

細かく書くのは大変なのでモデルだけ。
・Book
 本のタイトル、著者※1、ISBM、ジャンル※2 など
・BookInstance
 本のオブジェクトにステータスをつけたもの
・Author(著者※1)
 性、名、誕生日、死亡日など
・Genre(ジャンル※2)
 名前など

本は同じものが複数存在するからそれぞれにステータスを変えれるようにBookInstanceがあるんですね。

mongoDBデビュー

上で書いた通りmongoDBは初めてさわります。言葉の概念もよくわかりません。
データベースを作成と同時にコレクションを作ってくれといわれてもよくわからないのですが
検索してみたら要するにsqlでいうところのテーブルなんですね。
ではBookというコレクションを最初に作成してみました。

そしてなんとここからチュートリアルが翻訳されていませんw

mongooseを読み込む。mongoDBに接続する。

ここからは斜め読みで進めてみます。

app.jsにdb周りの記述を追加します。
var app = express();の下に追加します。
var mongoose = require("mongoose"); var mongoDB = "mongodb://localhost/<database_name>"; //portはいらないんだー。と思いました。 mongoose.connect(mongoDB); mongoose.Promise = global.Promise; var db = mongoose.connection; db.on("error", console.error.bind(console, "MongoDB connection error:"))

モデルの作成

モデルはどこに作るんだろうとみたら別のjsとしてつくるみたいですね。
ふむ。
わかりやすいです。
が、jsの文字列の扱いがなれません。。括らなくてもOKなの?

XXXSchema.virtual(名前).get(function(){return XXXXX})

これはレコードが追加された瞬間に処理されるのでしょうか。問い合わせがあった時に処理されるのでしょうか。

仮データを入れる

チュートリアルの方でコードを用意してくれているみたいです。
populatedb.jsをルートに置いてnodeコマンドで実行するみたいです。
そのjsの中でasyncというモジュールを使っているのでインストールしときます。
npm install async

node populaterdb <database_name>
実行したらだだだっとデータが入りました。

name count size
authors 5 99.4B
bookinstance 11 133.5b
books 7 405.6B
genres 3 53.7B

順調順調。
つづく。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?