はじめに
メンターさんに与えられた課題として、配列を仮想DBとし、それに対してCRUD処理を行うようにするAPIサーバーを実装します。
各CRUD処理1つに1記事という形にします。
GitHub
この記事のまとめ
- 最初の環境構築をした
- DB、コメントモデルを作成した
最初の環境
他に必要なライブラリがあれば都度インストールします。
仕様
用意するDB
- comment(Model)
- ID:数値、新しいコメントを作成するたびに自動で数値が1増える(オートインクリメント)、他のIDの値と重複してはならない
- username:文字列、ユーザーが手動で書き込む
- body:文字列、ユーザーが手動で書き込む
- createdAt:Date、コメントを作成した時点の日付をセットする
- updateAt:Date、コメントを作成した時点の日付をセットするが、新しくusernameとbodyを更新した場合、更新した時点の日付をセットする。
 
このDBを、配列Commentsにセットする。
機能一覧
- 
「GET/api/comments」リクエストを送ると、コメント一覧がレスポンス値として返ってくる
- 
「POST/api/comments」リクエストを送ると、新規にComment1件を作成し、作成されたCommentがレスポンス値として返ってくる
- 
「PUT/api/comments/:id」リクエストを送ると、id値に紐づいたComment1件を更新して、更新したComment1件がレスポンス値として返ってくる
- 
「DELETE/api/comment/:id」リクエストを送ると、id値に紐づいたComment1件を削除して、削除したComment1件がレスポンス値として返ってくる
ダミーDB、コメントモデルの作成
./models/Comment.js
const dayjs = require("dayjs");
const comments = [];
let nextId = 1;
class Comment {
  constructor({ username, body }) {
    this.id = nextId++;
    this.username = username;
    this.body = body;
    this.createdAt = dayjs().format("YYYY年MM月DD日 HH:mm:ss");
    this.updatedAt = dayjs().format("YYYY年MM月DD日 HH:mm:ss");
  }
}
Day.js:JSの標準機能にはnew Date()がありますが、今回は簡単に日時の出力の設定ができ、軽量なDays.jsを使用することにしました。
commentsとComment
グローバル空間に今回の仮想DBである配列commentsとnextID(CommentのID値)をセットします。
その後Commentクラスを作成、各情報を書き込んでいきます。
これでダミーDB、コメントモデルの作成は終了です。
テスト用データを作成
その後、後々テストで使用していくため、先にいくつかのCommentデータを配列に入れておきます
./models/Comment.js
// テスト、確認用に配列に挿入するDBの作成
for (let i = 0; i < 5; i++) {
  const comment = new Comment({
    username: 'username' + i,
    body: 'body' + i,
  });
  comments.push(comment);
}
次に、「「GET/api/comments」リクエストを送ると、コメント一覧がレスポンス値として返ってくる」機能を作っていきます