可重用 API 流行的最大原因是 API 允许使用来自 Web 客户端、移动应用程序、桌面应用程序的数据,实际上是任何客户端。将构建一个基于 Nodejs,由 MongoDB 数据驱动的强大而灵活的 GraphQL API,并支持 Swagger 文档。
本文基于《Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(一)》的MongoDB数据库部分。
项目代码仓库:github.com/QuintionTan…
路由设置
Hapi 的路由非常直观,假设点击 /
希望发生什么?这里有三个主要组成部分。
path
:一般是资源的路径method
:API请求方法,一般是指HTTP方法,常用的包括POST
、GET
、PUT
、DELETE
handler
:一般是指API的响应逻辑
const hapi = require("hapi"); const server = hapi.server({ port: 3006, host: "localhost", }); const init = async () => { server.route({ method: "GET", path: "/", handler: (request, response) => `<h1>This is powerful api.</h1>`, }); await server.start(); console.log(`Server running at:${server.info.uri}`); }; init();
在 init
方法中,使用 server
的 route
的方法增加根目录访问的响应API,一个简单的 GET
接口。
设置数据库
接下来要建立数据库,这里将使用 mongodb 和 mongoose。
本文构建的API服务使用一个基于分布式文件存储的数据库 MongoDB。
在 Nodejs 中编写与数据库相关的逻辑(CURD操作)通常使用 Mongoose ,而 Mongoose 是 MongoDB 的一个对象模型工具,是基于 node-mongoldb-native
开发的 MongoDB 驱动,可以在异步环境下执行。同时它也是针对 MongoDB 操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让 Nodejs 下操作 MongoDB 数据库变得更加灵活简单。
在 Nodejs 下 MongoDB + Mongoose
是一种常见的开发组合。
开始安装依赖:
npm install mongoose --save
在文件 server.js
引入:
const mongoose = require("mongoose");
接下来先来配置数据库环境,可以参考官方文档进行安装,按照文档步骤基本可以正常配置好,这里就不展开。这里介绍使用 Docker 来启动一个 MongoDB,对于 Docker 如果不熟悉,可以参阅《面向WEB开发人员的Docker》。
设置 Mongo Docker 镜像
使用以下命令拉取 Docker 镜像:
docker pull mongo
现在已经将Mongo Docker 镜像下载到自己机器上了,执行以下命令运行 MongoDB 。
docker run -it -v $PWD/mongodata:/data/db -p 27017:27017 --name mongodb -d mongo
MongoDB 运行在端口 27017
上,数据存储在项目根目录下的文件夹 mongodata
。
接下来增加数据库连接逻辑:
const mongoUrl = "mongodb://127.0.0.1:27017/powerful"; const mainDB = mongoose .createConnection(mongoUrl, { useNewUrlParser: true, useUnifiedTopology: true, }) .asPromise(); mainDB .then((db) => { console.info("Connected to MongoDB mainDB"); db.model("Users", new mongoose.Schema({ name: String })); }) .catch((err) => { console.error("Failed to connect to mainDB", { params: { err: err.message }, }); });
在终端运行代码可以看到如下结果:
到这里就完成数据库的设置和连接,连接成功后创建一个 Users
的集合,可以通过 MongoDB 可视化工具 MongoDB Compass 连接到数据库查看数据信息: