PHP 格式化输出 JSON:一个适合浏览器查看的轻量方法

这篇文章整理了一个在 PHP 5.4 及以上版本中格式化输出 JSON 的简洁方法。重点不在复杂封装,而是说明 `json_encode` 配合 `JSON_UNESCAPED_UNICODE` 与 `JSON_PRETTY_PRINT` 的实际作用,以及如何兼顾浏览器直接输出和字符串返回两种用法。 开发 PHP 接口或排查数据结构时,最常见的问题不是能不能输出 JSON,而是输出后难不难读。

PHP 格式化输出 JSON:一个适合浏览器查看的轻量方法

JavaScript 里怎样用 IIFE 做模块化封装

IIFE 是早期 JavaScript 中非常实用的模块化手法:利用函数作用域隐藏内部状态,只暴露必要接口,同时减少全局污染、规避命名冲突,并通过参数传递实现依赖注入。即使今天已有 ES Module,理解 IIFE 仍有助于阅读旧项目和梳理模块边界。

JavaScript 里怎样用 IIFE 做模块化封装

Node.js 日志在 Ubuntu 如何做到实时告警

在 Ubuntu 上为 Node.js 日志做实时告警,常见路线大致分成三类:直接监听日志文件、借助 pm2 管理进程日志,或接入 Prometheus、Grafana、ELK 这类监控体系。它们的差别主要在部署复杂度、扩展能力和后续运维成本。 在 Ubuntu 上给 Node.js 日志做实时告警,真正要解决的不是“能不能看到日志”,而是如何把异常内容稳定地转成可执行通知。

Node.js 日志在 Ubuntu 如何做到实时告警

JavaScript 级联菜单自动收起怎么利用事件冒泡

级联菜单的自动收起,关键不在给每个子项单独绑事件,而在于把“点击外部关闭”和“菜单内部继续操作”区分清楚。本文用 document 监听、contains 判断、stopPropagation 取舍,以及 focusout 配合 relatedTarget,整理出一套更稳的实现思路。

JavaScript 级联菜单自动收起怎么利用事件冒泡

JavaScript 中 Fetch 怎么在单元测试中优雅地 Mock 全局 fetch 函数

在 Jest 里 Mock 全局 `fetch`,关键不是“能不能替换”,而是怎样让返回值、调用链和清理方式都贴近真实环境。文章按常见测试写法拆解 `global.fetch` 的 Mock、可复用 helper、`Response.json()` 链式返回,以及 JSDOM、Node、MSW 的适用边界。 在 JavaScript 单元测试里,Mock `fetch` 看起来只是替换一个全局函数,真正容易出问题的却是返回结构、环境差异和测试收尾。

JavaScript 中 Fetch 怎么在单元测试中优雅地 Mock 全局 fetch 函数