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

API 的首要骨干将是 Hapi.js 来完成,接下来将详细介绍一切技能。终究实现一个具有十分强壮的 GraphQL API 和出色的文档。最重要的是将与客户端的集成(React、Vue、Angular)。

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

本系列文章将包含NodeJs后端服务(实现登录、文章办理)、前端VUE文章办理系统、Docker部署全栈项目开发。图很形象的展现全栈开发的场景,多显示器、多言语语法切换、言语之间语法互串。

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

系列文章:

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

开发环境

任何项目的开端都需要准备好开发环境,能够装备或许凭借Docker。

  • 装置 NodeJS
  • 根本的 JavaScript
  • 终端(任何都能够,最好是基于 bash 的)
  • 文本编辑器(任何一个都行),首要VSCode
  • 装置数据 MongoDB ,任何装置MongoDB,能够参看官方文档。

项目开端

翻开终端并创立项目,在项目目录下,初始化一个 Nodejs 项目。

npm init

接下来,设置 Hapi 服务器,装置依靠项,能够运用 Yarn 或 NPM。

npm install hapi nodemon --save

在持续之前,先简略介绍一下 hapi.js 是什么以及它能够做什么。

以最小的开支和完整的开箱即用功能构建功能强壮、可扩展的应用程序

hapi.js 使开发人员能够专注于编写可重用的应用程序逻辑,而不是花时间构建基础设施。

不运用 Express,而是运用 Hapi。简而言之,Hapi 是一个 Node 框架,选择 Hapi 的原因很简略,能够使代码简略和灵敏。Hapi 能够以十分快速的方法构建所需的 API。

装置的第二个依靠项是 nodemon,这个依靠库首要用于进步开发功率,每次代码有变更会自动重启API服务。

翻开编辑器 VSCode,正式进入编码。构建 Hapi 服务器十分简略,在根目录下创立一个 server.js 文件,代码如下:

const hapi = require("hapi");
const server = hapi.server({
    port: 3006,
    host: "localhost",
});
const init = async () => {
    await server.start();
    console.log(`Server running at:${server.info.uri}`);
};
init();
  • 第一行代码加载 hapi 依靠
  • 其次,创立一个常量 server 赋值 Hapi 服务器的一个新实例,传递一个带有端口和主机选项的装备对象。
  • 第三,创立一个名为 init 的异步函数。在 init 方法中,有另一个发动服务器的异步方法 server.start(),履行 init() 函数发动服务。

到此,一个简略的服务现已构建完成了,发动服务:

node server.js

翻开浏览器,输入 http://localhost:3006,不出意外的话会是一个404错误,这是因为还没有界说任何路由。

{"statusCode":404,"error":"Not Found","message":"Not Found"}

翻开 package.json 并编辑 scripts 部分,增加开发发动脚本,如下:

"dev": "nodemon server.js"

这样开发发动脚本如下:

npm run dev

为了使代码风格共同,保证每个开发人员的代码风格共同(能够简略看看《简谈进步团队代码质量的利器:ESLint 与 Prettier》),需要装置辅助开发的依靠:

npm install babel-eslint eslint-plugin-node --save-dev

装置完成之后,在项目根目录下增加文件 .eslintrc.js,代码如下:

module.exports = {
    root: true,
    parser: "babel-eslint",
    parserOptions: {
        ecmaVersion: 2018,
        sourceType: "module",
        ecmaFeatures: {
            legacyDecorators: true,
        },
    },
    plugins: [""],
    extends: ["eslint:recommended"],
    env: {
        browser: true,
    },
    rules: {},
    overrides: [
        // node files
        {
            files: [
                ".eslintrc.js",
                ".template-lintrc.js",
                "config/**/*.js",
                "src/*/server.js",
            ],
            parserOptions: {
                sourceType: "script",
            },
            env: {
                browser: false,
                node: true,
            },
            plugins: ["node"],
            rules: Object.assign(
                {},
                require("eslint-plugin-node").configs.recommended.rules,
                {
                    "node/no-unpublished-require": "off",
                }
            ),
        },
    ],
};

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

待续

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

本文正在参与「金石方案 . 分割6万现金大奖」