Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(三)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 笔记

可重用 API 流行的最大原因是 API 允许使用来自 Web 客户端、移动应用程序、桌面应用程序的数据,实际上是任何客户端。将构建一个基于 Nodejs,由 MongoDB 数据驱动的强大而灵活的 GraphQL API,并支持 Swagger 文档。

本文基于《Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(一)》的MongoDB数据库部分。

项目代码仓库:github.com/QuintionTan…


创建 Models


在开始创建数据模型之前,先把上面连接数据库的代码稍微整理一下,将其封装到一个文件中,创建文件名 mongoConns.js,代码如下:

const mongoose = require("mongoose");
class MongoConns {
    constructor() {
        this.getMainDB = this.getMainDB.bind(this);
        const mongoUrl = "mongodb://127.0.0.1:27018/powerful";
        this.mainDB = mongoose.createConnection(mongoUrl, {
            useNewUrlParser: true,
            useCreateIndex: true,
            useUnifiedTopology: true,
        });
        this.mainDB
            .then((db) => {
                console.info("Connected to MongoDB mainDB");
            })
            .catch((err) => {
                console.error("Failed to connect to mainDB", {
                    params: { err: err.message },
                });
            });
    }
    getMainDB() {
        return this.mainDB;
    }
}
let mongoConns = null;
module.exports = () => {
    if (mongoConns) return mongoConns;
    else {
        mongoConns = new MongoConns();
        return mongoConns;
    }
};

对于 MongoDB,遵循模型约定,接下来进行数据建模。这是一个相对简单的概念,将能够掌握。基本上,只是为集合声明对应的模式。可以将 MongoDB 的集合视为 SQL 数据库中的表。

在项目根目录下创建文件夹 models,在文件夹 models 中创建数据模型文件 Painting.js,代码如下:

const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const mongoConns = require("../mongoConns")();
const PaintingSchema = new Schema({
    name: {
        type: String,
    },
    url: {
        type: String,
    },
    techniques: {
        type: [String],
    },
});
module.exports = mongoConns.getMainDB().model("Painting", PaintingSchema);
  • 需要 mongoose 依赖
  • 引入数据库连接并初始化 mongoConns
  • 通过调用 mongoose 架构构造函数并传入选项来声明 PaintingSchema。注意它是如何强类型化的:例如,定义了 name 字段可以由一个字符串组成,而 techniques 由一个字符串数组组成。
  • 导出模型并将其命名为 Painting

增加新的路由

理想情况下,希望 URL 端点反映相应的操作。例如 /api/v1/paintings 或者 /api/v1/paintings/{id} 等等。

GETPOST 路由开始。 GET 获取所有 Painting ,POST 添加新的 Painting

回到根目录文件 server.js,添加两个新的路由代码:

const API_ENDPOINT = "/api/v1";
const init = async () => {
    server.route(
        {
            method: "GET",
            path: "/",
            handler: (request, response) => `<h1>This is powerful api.</h1>`,
        },
        {
            method: "GET",
            path: `${API_ENDPOINT}/paintings`,
            handler: (req, reply) => {
                return Painting.find();
            },
        },
        {
            method: "POST",
            path: `${API_ENDPOINT}/paintings`,
            handler: (req, reply) => {
                const { name, url, techniques } = req.payload;
                const painting = new Painting({
                    name,
                    url,
                    techniques,
                });
                return painting.save();
            },
        }
    );
    await server.start();
    console.log(`Server running at:${server.info.uri}`);
};

请注意,将路由修改为对象数组而不是单个对象,还使用了箭头函数。

  • /api/v1/paintings 路径创建了一个 GET 路由。在处理程序中,mongoose schema 方法 find(),它将返回所有记录,因为这里没有没有传递任何条件来查找。
  • 还为 /api/v1/paintings 路径创建了一个 POST 路由。这样的API设计将遵循 REST 约定。

在浏览器中输入 http://localhost:3006/api/v1/paintings,将在页面上看到一个空数组。

1.png

接下来调试 POST 的接口,需要按照工具 Postmain,下载安装好。

打开  Postmain ,创建一个POST 请求。2.png

配置好参数,点击发送,看到响应如下:3.png

至此一个新的记录已经创建了,可以去数据库中查看。或者返回浏览器刷新 http://localhost:3006/api/v1/paintings,可以看到如下数据:4.png

至此一个读取、写入接口完成了。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
4天前
|
XML 开发框架 .NET
ASP.NET Web Api 如何使用 Swagger 管理 API
ASP.NET Web Api 如何使用 Swagger 管理 API
|
6天前
|
存储 JavaScript API
Node.js中的异步API
【8月更文挑战第16天】
13 1
|
18天前
|
存储 缓存 JavaScript
构建高效后端服务:Node.js与Express框架的实战应用
【8月更文挑战第2天】在数字化时代的浪潮中,后端服务的构建成为了软件开发的核心。本文将深入探讨如何利用Node.js和Express框架搭建一个高效、可扩展的后端服务。我们将通过实际代码示例,展示从零开始创建一个RESTful API的全过程,包括路由设置、中间件使用以及数据库连接等关键步骤。此外,文章还将触及性能优化和安全性考量,旨在为读者提供一套完整的后端开发解决方案。让我们一同走进Node.js和Express的世界,探索它们如何助力现代Web应用的开发。
|
12天前
|
人工智能 NoSQL atlas
MongoDB Atlas与大语言模型的梦幻联动:如何瞬间提升企业级AI应用的构建效率?
【8月更文挑战第8天】在大数据时代,企业需挖掘数据价值。MongoDB Atlas作为云端数据库服务,以灵活性著称,减轻运维负担并支持全球数据分布。大语言模型(LLMs)革新AI构建方式,擅长处理自然语言。本文通过对比展示如何整合Atlas与LLMs,构建高效企业级AI应用:Atlas确保数据高效存储管理,LLMs提供语言理解与生成能力,二者结合加速AI应用开发并激发创新潜能。
24 1
|
14天前
|
XML API 网络架构
API架构风格对比:SOAP vs REST vs GraphQL vs RPC
API架构风格对比:SOAP vs REST vs GraphQL vs RPC
30 2
|
16天前
|
弹性计算 JavaScript 中间件
构建高效后端服务:使用Node.js和Express框架
【8月更文挑战第4天】本文将通过一个实际案例,详细介绍如何使用Node.js和Express框架快速构建一个高效、可扩展的后端服务。我们将从项目初始化开始,逐步实现RESTful API接口,并介绍如何利用中间件优化请求处理流程。最后,我们将展示如何部署应用到云服务器上,确保其高可用性和可扩展性。
|
17天前
|
NoSQL atlas MongoDB
构建实时银行应用程序:英国金融机构 Nationwide 为何选择 MongoDB Atlas
正如 Nationwide 在135 年前的初衷一样,无论数字化程度如何,Nationwide仍将继续以会员为核心,满足会员的日常需求
3839 3
|
26天前
|
存储 JavaScript 安全
Node中的AsyncLocalStorage 使用问题之生产环境中使用async_hooks的问题如何解决
Node中的AsyncLocalStorage 使用问题之生产环境中使用async_hooks的问题如何解决
|
19天前
|
JavaScript 前端开发 中间件
构建高效后端服务:Node.js与Express框架的深度探索
【7月更文挑战第31天】在快速迭代的技术浪潮中,Node.js和Express框架已成为构建灵活、高效后端服务的利器。本文将深入探讨如何利用这一组合打造高性能后端系统,同时分享实际开发中的经验和技巧。
19 0
|
1月前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。