"use strict";
const fs = require("fs");
const path = require("path");
const basename = path.basename(__filename); // 当前文件名
let routeArr = [];
// 同步读取当前目录,并过滤除了当前文件的文件名数组
fs.readdirSync(__dirname)
.filter(file => {
// 过滤掉隐藏文件、当前文件、非js文件, 返回当前目录下文件名称数组
return (
file.indexOf(".") !== 0 && file !== basename && file.slice(-3) === ".js"
);
})
.forEach(file => {
// 引入路由模块
let arr = require(path.join(__dirname, file));
// 汇总
routeArr.push(...arr);
});
module.exports = routeArr;
const GROUP_NAME = "test";
module.exports = [
// 纯测试返回 接口
{
method: "GET",
path: `/${GROUP_NAME}`,
handler: (request, h) => {
const data = { message: "test" };
// 响应数据方式:
// return h.response(data).code(200);
return data;
}
},
]
这个hapi插件是笔者认为强大好用的工具,可以根据路由给的config配置,自己生成对应的接口文档、测试接口数据 以及 配合Joi插件来校验数据
npm i hapi-swagger inert vision package
可参考 官方示例
const hapiSwagger = require("hapi-swagger");
const inert = require("inert");
const vision = require("vision");
const package = require("package");
module.exports = [
inert,
vision,
{
plugin: hapiSwagger,
options: {
info: {
title: "接口文档", // 文档的标题
version: package.version // 文档的版本
},
// 定义接口以tags属性为分类【定义分类的大标题】,给./routes路由的配置config:tags使用
grouping: "tags",
// 标签,用于对应路由config定义的tags进行归类
tags: [
{ name: "test", description: "测试相关" }
],
lang: 'zh-cn' // 文档语言
}
}
];
访问地址: http://localhost:3000/documentation