在 Hapi 框架中使用 MongoDB
在前端开发中,我们经常需要使用到数据库。MongoDB是一种非关系型数据库,它的使用方式有很多种。在本文中,我们将主要介绍在Hapi框架中如何使用MongoDB。
- 安装 MongoDB
首先,我们需要在本地安装MongoDB。安装可以通过官网下载最新的版本,也可以使用包管理工具在终端中安装。这里,我们以在Mac上使用HomeBrew安装为例:
brew update brew install mongodb
- 安装 MongoDB 驱动
接着,我们需要在Hapi项目中安装MongoDB的驱动,这个驱动提供了一系列的API来连接和操作数据库。可以使用npm来安装:
npm install mongodb --save
- 连接 MongoDB
在Hapi项目中使用MongoDB之前,你需要先连接到MongoDB数据库。我们先创建一个MongoDB连接,可以在app.js文件中添加以下代码:
// javascriptcn.com 代码示例 const Hapi = require('hapi'); const { MongoClient } = require('mongodb'); const server = new Hapi.Server(); (async () => { try { const db = await MongoClient.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true }); console.log("MongoDB connected!"); } catch (err) { console.log(err); } })(); server.connection({ port: 3000, host: 'localhost' }); server.start((err) => { if (err) { throw err; } console.log(`Server running at: ${server.info.uri}`); });
在上面的例子中,我们首先导入MongoDB驱动,并创建了一个MongoDB连接到本地的27017端口的mydb数据库。
- 查询 MongoDB 数据库
接下来,我们将向实体类中添加查询和一些其他方法并演示如何查询和更新MongoDB中的数据。首先,让我们创建一个文件 /model/item.js
,代码如下:
// javascriptcn.com 代码示例 const { ObjectID } = require('mongodb'); class Item { constructor(db) { this.db = db; this.collection = db.collection('items'); } get() { return new Promise((resolve, reject) => { this.collection.find({}).toArray((err, docs) => { if (err) { return reject(err); } return resolve(docs) }); }); } getById(id) { return new Promise((resolve, reject) => { this.collection.findOne({ _id: new ObjectID(id) }, (err, result) => { if (err) { return reject(err); } return resolve(result); }); }); } update(id, item) { return new Promise((resolve, reject) => { this.collection.updateOne({ _id: new ObjectID(id) }, { $set: item }, (err, result) => { if (err) { return reject(err); } return resolve(result); }); }); } } module.exports = Item;
在这个文件中,我们导入了mongodb
包,并创建了一个Item
类。在类的构造函数中,我们初始化了一个指向MongoDB
数据库的实例,并且创建了一个指向items
的集合的指针。
这个类中,我们定义了get()
, getById(id)
, 以及 update(id, item)
这三个方法。
get()
方法返回所有的items
,返回的是一个Promise
,
getById(id)
方法通过对象的 _id
属性来获取一个唯一的item,在返回一个Promise
。
update(id, item)
方法使用传递的ID并更新item
所代表的实体。返回也是一个Promise
接下来,我们需要在路由中使用这个类来完成对数据库的操作。在/routes/item.js
文件中添加以下代码:
// javascriptcn.com 代码示例 const Item = require('../model/item'); module.exports = [ { method: 'GET', path: '/items', handler: async (request, h) => { const item = new Item(request.server.plugins['hapi-mongodb'].db); return await item.get(); } }, { method: 'GET', path: '/items/{id}', handler: async (request, h) => { const item = new Item(request.server.plugins['hapi-mongodb'].db); return await item.getById(request.params.id); } }, { method: 'PUT', path: '/items/{id}', handler: async (request, h) => { const item = new Item(request.server.plugins['hapi-mongodb'].db); return await item.update(request.params.id, request.payload); } } ];
以上的代码为您提供在路由中初始化hapi-mongodb
插件所需要的item.js
的代码。在以上代码中,我们使用方法从MongoDB中检索items信息的三个路由功能。
总结
通过这篇文章的介绍,你可以学习到如何在Hapi框架中使用MongoDB,如何创建MongoDB连接,如何查询MongoDB的数据,以及如何更新MongoDB的数据。同时,这篇文章的代码示例也为您提供了指导意义,可以帮助您在实际的应用中更好地使用这些技术和方式。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653fa23c7d4982a6eb931ec9