数据库模块
本课属于 Coddy Node.js 学习旅程的“使用 MongoDB 的数据库”单元。第 26 课,共 29 课。
把打开数据库并保存所有路由的代码都放在一个文件中,会让文件越来越难读,而且任何需要 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:仍然有三本书。
亲手试试
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 的数据导入数据库。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
使用 MongoDB 的数据库中的所有课
自己练习: Express 在线编辑器