データベースモジュール
CoddyのNode.jsジャーニー「MongoDBによるデータベース」セクションの一部。レッスン 15/18。
データベースを開き、すべてのルートを保持する1つのファイルは読みにくくなり、booksを必要とする別のファイルを作るたびに、再接続しなければなりません。
接続を独立したモジュールに移しましょう。モジュールのトップレベルのコードは、どのファイルからであれ初めてインポートされたときに一度だけ実行され、その後のインポートでは同じエクスポートが使われます。そのため、コレクションをインポートするファイルがいくつあっても、クライアント、インデックス、シードは一度だけ実行されます。モジュールではトップレベルのawaitが使え、インポートするファイルは処理が終わるまで待ちます。
// store.js
import { MongoClient } from 'mongodb';
const client = new MongoClient('mongodb://localhost:27017');
export const orders = client.db('shop').collection('orders');
await orders.createIndex({ number: 1 }, { unique: true });// server.js
import { orders } from './store.js';チャレンジ
簡単server.jsは現在、./db.jsからbooksとratingsをインポートするため、まだ起動できません。db.jsでクライアントを作成し、両方のコレクションをエクスポートし、ISBNインデックスを作成して、書籍と著者の初期データを登録します。
実行を押してください。すべてのルートはこれまでどおり応答します。GET /booksを2回送信しても、書籍は3冊のままです。
自分で試してみよう
import { MongoClient } from 'mongodb';
import { authorList } from './authors.js';
const bookList = [
{ title: 'Dune', author: 'Frank Herbert', year: 1965, isbn: '9780441013593', genre: 'scifi' },
{ title: 'Kindred', author: 'Octavia E. Butler', year: 1979, isbn: '9780807083697', genre: 'scifi' },
{ title: 'Emma', author: 'Jane Austen', year: 1815, isbn: '9780141439587', genre: 'classic' },
];
// ここでクライアントを作成し、books コレクションと ratings コレクションをエクスポートし、
// ISBN インデックスを作成して、bookList と authorList を初期データとして投入します。
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。