駆け出しのエンジニア日記

プログラミング言語勉強中の奮闘日記

MongoDBのリレーション:1対たくさん

〜MongoDBのリレーション〜 今回は1対たくさんの場合を見ていきます。 例えば、商品の生産管理でどの農場でどの商品が作られているかの情報を提供したい時 のケースで記述していきます。 早速書いていきます。 ・1対たくさん(One to Many) //1対たくさんの…

MongoDBのリレーション:1対数個

〜MongoDBのリレーション〜 ここで言うリレーションはデータの関連付けを指すことになります。 簡単に説明すると、あるSNSに対して、あるツーザーが投稿します。コメントがついた り、お気に入りができたり、リツートができたりと一つのデータに対して関連性…

asyncなエラーハンドラ

非同期処理のところでエラーが起きた場合どうなるのでしょうか。 asyncなエラーハンドラについて完成させていきます。 ・AppError.js // extendsキーワードで継承して新しいクラスを作成 class AppError extends Error { constructor(message, status) { sup…

カスタムなエラークラスを作成

エラーハンドリングでよく採用されるやり方があります。 一つの例ですが、自分たちのエラークラスを作成するやり方です。 なぜ、クラスを作成するかというとステータスコードだけでエラーの概要を伝えること ができると便利だからです。 言葉だけでは難しい…

カスタムのエラーハンドラを作成する

実用的ではないですが、理解を深めるために簡単なカスタムエラーハンドラを作っていきます。 エラー処理ミドルウェア関数は、その他のミドルウェア関数と同じ方法で定義します。 エラー処理関数の引数は3つではなく、4つ (err、req、res、next) となります。…

404エラーのルーティング定義

ルーティングを設定していない場所にリクエストが投げられた時、404エラーを返すよ うにルーティング設定を行います。 404エラー とは、、、 「 404 not found 」:存在しないページにアクセスしようとした時に起こるエラー 他にもHTTPステータスコードが存…

自作のミドルウェアを作ってみる

簡単なものですが、自作のミドルウェアを作成してみましょう。 expressjs.com Expressのガイドにも記載がありますが、 「 req , res 」のオブジェクト以外にも第三引数に「 next 」を渡すことができます。 この「 next 」が次のミドルウェアを指す関数となっ…

Expressのミドルウェア入門

ミドルウェアとは、リクエスト/レスポンスのライフサイクルの中で実行される関数のこ とを指します。 これまでは下記のものを使用してきました。 //フォームからデータを受け取れるようにする ・app.use(express.urlencoded({ extended: true })); //リクエ…

ExpressでMongooseを使う part6

農産物の商品管理アプリ作成の続きで、最後になります。 商品の詳細ページから商品の削除ができるようにします。 フォームのリクエストは「GET」か「POST」しか投げることができません。 DELETEリクエストも「PUT」と同様になるので今回も「method-override…

ExpressでMongooseを使う part5

農産物の商品管理アプリ作成の続きです。 今回は、商品の編集・更新ができるようにしていきます。 ルーティングを追加していきます。 ・index.js const express = require('express'); const app = express(); const path = require('path'); const mongoose…

ExpressでMongooseを使う part4

農産物の商品管理アプリの作成の続きです。 今回は、商品の新規登録を表示できるようにしていきます。 フォームが必要なのと、フォームがリクエストを投げる先の二つのルーティングが必要 になります。 早速追加していきましょう。(_の部分) ・index.js co…

ExpressでMongooseを使う part3

農産物の商品管理アプリ作成の続きになります。 今回は、商品の詳細ページを表示できるようにしていきます。 商品一覧からクリックし、細かい内容を確認できるページに遷移する流れです。 早速index.jsにルーティングの追加をしていきましょう。(_の部分) …

ExpressでMongooseを使う part2

簡単な農産物の商品管理アプリ作成の続きになります。 農産物の商品が一覧できるような画面を作成していきます。 index.jsにルーティングの追加をしていきます。(_のところ) const express = require('express'); const app = express(); const path = re…

ExpressでMongooseを使う part1

ExpressからMongooseのモデルのインスタンスを用いて、データベースに対してCRUD 操作を行います。 簡潔に表すとExpressの簡易的なWEBアプリを作成し、WEBページからMongoDBに対し てCRUD操作ができるものを作成します。 今回は簡単な農産物の商品管理アプリ…

Mongooseのミドルウェア

ミドルウェア ・・・非同期関数の実行中に制御が渡される関数です。 特定のMongooseの処理が行われる前や後ろに自分の処理を差し込めることができま す。 使われている例を挙げると、例えばSNSでユーザーが退会した際に、退会ボタンを押下 した後にコメント…

Mongooseのvirtual

virtual・・・ データベースには保存していない仮想的なプロパティをスキーマに追加できる機能。 MongoDBに永続化(保存)されませんが、ドキュメント取得時には付与されるものになり ます。 早速サンプルを見ていきます。 //スキーマ定義 const personSchema …

スキーマにメソッドを追加してみる

インスタンスメソッド・・・ クラスから生成されたインスタンスから使えるメソッド サンプルを見てみましょう。 //スキーマ定義 const productSchema = new mongoose.Schema({ onSale: { type: Boolean, default: false }, //categoriesはStringの配列と宣言…

Mongoose:スキーマのバリデーション

Mongooseのスキーマのバリデーションについてまとめていきます。 使用頻度の高いものをピックアップしてみました。 これまでスキーマのバリデーションは下記のような記述でした。 この形は省略系となっており、これ以外にも細かく定義ができます。 const mov…

Mongooseでデータを削除する

Mongooseでデータを削除する方法について見ていきます。 削除において必要なメソッドは複数あります。 ・deleteMany()・・・検索条件に一致するドキュメントをすべて削除します ・deleteOne()・・・該当のドキュメントを1つのみ削除します。 早速見ていきま…

Mongooseでデータを更新する

Mongooseでデータを更新する方法を見ていきます。 更新において必要なメソッドは下記の通りです。 ・update() ・updateMany() ・updateMany() 注意点としては、これらのメソッドは戻り値としてドキュメントを返しません。 つまり処理の結果のみです。 { n: 1…

Mongooseでデータを取得する

今回はMongooseデータを取得する方法について見ていきます。 以前まとめたMongoDBでデータを取得する方法に似ている部分もあるので理解もしやすいと思います。 取得において必要なメソッド、3種類の説明します。 ・find()・・・ 指定した条件ですべてのドキ…

Mongooseでのモデル作成・データの挿入

今回はシンプルなモデルを作成し、データベースへデータの挿入まで行っていきます。 モデル作成の前に、スキーマの定義が必要になります。書き方は下記の通りです。 //スキーマ定義・・・あるデータの形を定義したもの mongooseの中だけで使えるmongoDBとは…

mongooseとは

mongooseとは・・・非同期環境で動作するように設計された MongoDBオブジェクト モデリングツールです。 簡潔に説明すると、Mongo DBのドキュメントをJavaScriptのオブジェクトにマッピング(変換)してくれるものになります。 mongooseはアプリケーションの…

MongoDBで使える比較演算子

MongoDBで使える比較演算子の紹介をしていきます。 ・(>)より大きい - $ gt db.collections.find({"likes" : {$gt : 100}}) コレクションは100以上のデータを "好き"を取得したい場合 ・(<)未満 - $ lt db.collections.find({likes : {$lt : 150}}) コレ…

MongoDBでデータを削除する

今回はデータの削除について見ていきます。 削除にも種類があり、 db.collection.deleteOne()・・・削除対象のデータが一つ db.collection.deleteMany()・・・削除対象のデータが複数 の2種類があります。 ・deleteOne() db.collection.deleteOne({key: valu…

MongoDBでデータを更新する

今回はデータの更新を行なっていきます。 更新にも種類があり、 db.collection.updateOne()・・・単一データの更新 db.collection.updateMany()・・・複数データの更新 があります。 ・updateOne() db.collection.updateOne({検索条件}, {更新内容}) 第一引…

MongoDBでデータを取得する

今回は、MongoDBでデータを取得する方法について見ていきます。 ・全てのデータ(ドキュメント)を取得する場合 db.collection.find() を用います。 これは引数なしで使え、下記のようにコレクション名を指定すればデータ(ドキュメント)を取得できます。 ・…

MongoDBにデータを作成する

MongoDBでデータを扱うには「BSON」というものを知っておく必要があります。 BSON・・・ BSONはJSONに似たドキュメントの効率的な格納に特化した形式のものになります。 しかし、BSONはJSONのように人間が読める形式ではありません。 また、BSONはJSONに比べ…

MongoDB入門

MongoDBは、NoSQLのなかでも最もよく使われるデータベースの1つとなります。 そしてMongoDBはNode.jsやExpressと一緒によく使われています。 JavaScriptの知識を活かすことができ、使っている人も多いのが特徴です。 SQLデータベースを理解しておくことも必…

データベース入門

データベースとは、管理しやすいように整理されたデータ群です。 なぜデータベースが欲しいのか?? 一つにデータの永続性が欲しいからです。 これまではサーバーが再起動するたびにデータが消えてしまうので、使い物になりません。 メリットとして下記のこ…