"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