恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
Midway Info 组件实战指南:在 Web 与 Serverless 应用中一键展示项目运行信息
首页
资讯中心
/
Midway Info 组件实战指南:在 Web 与 Serverless 应用中一键展示项目运行信息
Midway Info 组件实战指南:在 Web 与 Serverless 应用中一键展示项目运行信息
发布时间:2026/9/29 21:40:05
后端微服务云原生【免费下载链接】midway A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 项目地址https://gitcode.com/gh_mirrors/mi/midway点击查看免费下载导读midwayjs/info是 Midway 框架内置的一个轻量级信息展示组件它像 PHP 的phpInfo()一样通过一条 HTTP 路由默认/_info把当前项目的依赖版本、运行环境、系统资源、环境变量、网络与时间信息等内容以可视化的 HTML 页面呈现出来同时提供纯 JSON 的输出模式供内部调试与诊断使用。读完本文你将掌握如何在 Midway 的 Koa / Express / Faas / Egg 应用中接入该组件、自定义标题与路由、按需隐藏敏感配置项如密钥、Token以及理解其底层信息采集与脱敏实现原理。本文以 packages/info/README.md 为骨架结合该包的源码src、默认配置config.default.ts与测试用例test/index.test.ts展开所有结论均可在当前仓库中直接验证。组件是什么Midway 版的 phpInfomidwayjs/info的核心目标是在应用启动后通过一个固定的路由展示项目自身的全景运行信息。与phpInfo()的定位类似它把分散在 Node.js 进程、操作系统、依赖清单和 Midway 容器中的各类元数据集中收敛方便开发者在联调、排障和交付前快速核对环境。从源码看这个组件包体积很小只依赖一个第三方库picomatch用于通配符匹配核心由以下几个文件构成configuration.ts组件装配入口负责注册默认配置并在onReady阶段把中间件挂载到应用上infoService.ts信息采集与输出的核心服务聚合了 10 类信息并执行敏感信息脱敏middleware/info.middleware.ts路由分发中间件按请求路径命中后返回 HTMLutils.tsHTML 渲染、字节换算、安全脱敏等工具函数interface.ts配置项类型与信息分类枚举定义。快速接入三步开启/_info接入过程非常简单只需要在应用的configuration.ts中导入该组件即可。以下示例完整取自 README.mdimport * as info from midwayjs/info; import { join } from path; Configuration({ imports: [ info, ], importConfigs: [ join(__dirname, ./config) ] }) export class ContainerConfiguration { }接入完成后直接访问curl http://localhost:7001/_info即可看到渲染好的信息页面。默认情况下该页面会以 HTML 表格的形式展示所有信息如果你在浏览器中查看效果类似于一个带彩色表头标题栏为紫色渐变的信息总览页。装配阶段的关键逻辑位于 configuration.ts组件在onReady阶段通过MidwayApplicationManager获取所有koa、faas、express、egg类型的应用实例并逐一挂载InfoMiddleware。这意味着只要业务应用属于这四类 Web 运行时接入组件后路由会自动生效无需手动注册中间件。配置项详解标题、路径与敏感信息治理组件提供了一套默认配置定义于 config.default.ts你可以在业务项目的config.default.ts中按需覆盖配置项默认值类型作用info.titleMidway Infostring信息页面的标题会渲染在 HTML 页面的顶部横幅中info.infoPath/_infostring信息页面的访问路由路径info.hiddenKey[keys, *key, *token, *secret*, pass*]string[]需要脱敏的配置/环境变量键名匹配模式支持通配符info.ignoreKey[]string[]需要从信息输出中完全剔除的键名对应到 TypeScript 类型定义见 interface.tsexport interface InfoConfigOptions { title: string; infoPath: string; hiddenKey: Arraystring; ignoreKey: Arraystring; }自定义路由与标题例如你想把信息页放在/status并改名// src/config/config.default.ts export default { info: { title: My Service Dashboard, infoPath: /status, }, };需要注意的是infoPath的生效依赖中间件对ctx.pathKoa/Faas/Egg或req.pathExpress的精确匹配见 info.middleware.ts。因此该路径应避免与其他业务路由冲突。ignoreKey彻底隐藏某类信息hiddenKey只做脱敏隐藏具体值而ignoreKey会把匹配到的键整体从输出中删除。在 infoService.ts 中可以看到每一类信息返回后都会经过一次过滤Object.keys(info).filter(k !this.ignoreKey.includes(k))。如果你想在对外展示的页面上完全抹掉例如aliyun相关配置可以这样配置export default { info: { ignoreKey: [aliyun], }, };hiddenKey的脱敏规则通配符 分级打码默认的hiddenKey定义在 interface.tsexport const DefaultHiddenKey [keys, *key, *token, *secret*, pass*];在InfoService初始化时这些模式会被编译为picomatch匹配器infoService.ts随后在采集Midway Config与Environment Variable两类信息时对键名做不区分大小写的匹配isMatch(key.toLowerCase())。一旦命中具体值会通过safeContent进行分级打码utils.ts规则非常直观值长度打码效果示例0全部替换为空1 ~ 2全部替换为*ab→**3 ~ 5仅保留首位字符abcde→a****6 ~ 9保留首尾各 1 位abcdef→a****f10 ~ 14保留首尾各 2 位abcdefghijklmn→ab**********mn15 及以上保留首尾各 3 位abcdefghijklmnopq→abc***********opq这套规则在 util.test.ts 中有完整的单测覆盖例如断言safeContent(abcdefghijklmnopq) abc***********opq。需要特别留意的是脱敏是基于键名匹配的。默认模式中的*key、*token、*secret*、pass*基本覆盖了常见的密钥命名习惯如accessKeySecret、SecretKey、SecurityToken但如果你使用了非常规的键名例如直接叫dbPassword却不含key/token/secret/pass前缀特征建议将其补充进hiddenKey。10 类信息全景InfoService 都采集了什么InfoService.info()是信息的统一入口infoService.ts它依次聚合 10 类信息每一类都对应一个独立方法分类InfoType采集方法主要内容ProjectprojectInfo()项目名称、应用目录AppDir、基础目录BaseDir、项目根Root、当前环境EnvSystemsystemInfo()操作系统平台、Node/V8 版本、进程 ID、架构、主机名、Home 目录、CWD、启动命令行Memory CPUresourceOccupationInfo()进程 RSS、堆总量、堆使用量、V8 外部内存、系统总内存、CPU 型号/核数/实时占用率SoftwaresoftwareInfo()midwayjs/core、midwayjs/decorator、midwayjs/faas的版本号Environment VariableenvInfo()全部进程环境变量自动脱敏TimetimeInfo()当前时间戳、系统运行时长uptime、时区与时区名NetworknetworkInfo()各网卡接口的 IP 地址按 IPv4 优先排序过滤回环loDependenciesdependenciesInfo()项目package.json中的全部依赖及其声明版本与本地实际解析版本Midway ServicemidwayService()当前 IoC 容器注册表中所有服务含命名空间与作用域标识Midway ConfigmidwayConfig()应用当前的全量配置自动脱敏其中几处实现细节值得展开内存换算所有字节数据通过bitToMB统一换算为 MB 并以两位小数输出utils.ts例如memory.rss、heapTotal、heapUsed、external和totalmem()CPU 占用率基于os.cpus()每个核心的times统计按1 - idle/(idleusernicesysirq)计算并保留两位小数多个核心之间用/拼接infoService.ts依赖版本对比dependenciesInfo()读取项目package.json的dependencies再通过safeRequire尝试读取每个依赖自己的package.json拿到实际安装版本输出形如4.2.4(^4.2.0)的“本地版本(声明范围)”格式若解析失败则标记为Not FoundinfoService.ts配置序列化safeJson会把配置对象递归序列化为 JSON 字符串函数类型会输出为function 函数名(N args)形式便于表格展示infoService.ts。两种输出模式HTML 页面与 JSON 数据info()方法的签名支持传入InfoValueTypeinterface.tsexport type InfoValueType html | json;不传参数默认返回TypeInfo[]数组即结构化的 JSON 数据适合程序化消费传入html由renderToHtml渲染成完整的 HTML 字符串utils.ts包含标题横幅、分类色块和键值表格并通过内联style保证任何页面打开都有基本样式。中间件在命中路由时固定输出 HTML 模式info.middleware.ts。如果你想在业务代码里直接拿到结构化数据可以像测试那样注入服务获取import { InfoService } from midwayjs/info; const infoService await app.getApplicationContext().getAsync(InfoService); const json infoService.info(); // TypeInfo[] 结构 const html infoService.info(html); // HTML 字符串这一点在 test/index.test.ts 中也有对应的断言info()返回的对象键数量大于 5info(html)输出中包含标题文本Midway Info。中间件行为Koa/Faas/Egg 与 Express 的双通道实现InfoMiddleware根据应用命名空间区分两套处理逻辑info.middleware.tsKoa / Faas / Egg 风格默认分支中间件接收(ctx, next)当ctx.path infoPath时直接返回 HTML 字符串由 Koa 上下文响应否则调用next()放行Express 风格接收(req, res, next)当req.path命中时通过res.type(html)res.send(...)显式返回。测试用例对两种运行时都做了验证test/index.test.tsKoa 场景请求/_test_route非信息路由时正常返回业务内容Express 场景请求/_info时返回text/html且包含Midway Info标题。另外中间件类通过静态getName()返回info符合 Midway 中间件命名规范。安全提示与生产实践建议由于信息页面会暴露环境变量、依赖清单、全量配置等敏感信息生产环境使用时有几点建议严格限制访问范围/_info相当于一个应用体检报告建议通过网关白名单、内网访问或鉴权中间件保护避免暴露在公网审查hiddenKey覆盖度默认脱敏模式覆盖常见密钥命名但请结合自身配置命名习惯补齐模式例如某些厂商的AppSecret、PrivateKey、Password等命名特征善用ignoreKey对确实不应出现的整块配置如内网地址、账号信息使用ignoreKey从输出中彻底剔除按需调整路由将infoPath改为不易被扫描的路径也是一种简单的规避手段。从源码与测试来看该组件的脱敏逻辑同时作用于环境变量与配置对象两个采集通道并且配置对象在递归序列化时也会逐层对键名进行脱敏判断infoService.ts安全性设计是成体系的。相关资源组件 READMEpackages/info/README.md默认配置packages/info/src/config.default.ts信息采集核心实现packages/info/src/infoService.ts路由中间件packages/info/src/middleware/info.middleware.ts脱敏与渲染工具packages/info/src/utils.ts集成与脱敏测试packages/info/test/index.test.ts、packages/info/test/util.test.ts包信息版本 4.2.4Node 20packages/info/package.json赞分享后端微服务云原生【免费下载链接】midway A Node.js Serverless Framework for front-end/full-stack developers. Build the application for next decade. Works on AWS, Alibaba Cloud, Tencent Cloud and traditional VM/Container. Super easy integrate with React and Vue. 项目地址https://gitcode.com/gh_mirrors/mi/midway点击查看免费下载相关推荐Carbon Trigger 浏览器扩展完整实现解析基于 CO2 Signal API 的电力碳排放强度提醒工具Carbon Trigger 浏览器扩展完整实现解析基于 CO2 Signal API 的电力碳排放强度提醒工具 本篇技术指南以 Web Dev For Be运维性能剖析根因分析可观测性健康检查CANN3步部署BiliBiliToolProB站自动签到与账号管理的完整免费方案3步部署BiliBiliToolProB站自动签到与账号管理的完整免费方案 每天醒来第一件事是打开B站签到、刷两个视频、投两枚币、再溜进直播间发条弹幕——这后端任务调度工作流自动化使用 midwayjs/serverless-fc-starter 在阿里云函数计算 FC 上运行 Midway 应用使用 midwayjs/serverless fc starter 在阿里云函数计算 FC 上运行 Midway 应用 本指南围绕 packages serv后端微服务云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考