// 已读取AGENTS.md import * as fs from 'fs'; import * as path from 'path'; /** * 第七十四批回归闸门:5xx 错误脱敏 + 全局限流。 */ describe('第七十四批限流与错误脱敏闸门', () => { const root = path.resolve(__dirname, '../../'); const indexCode = fs.readFileSync(path.join(root, 'server/src/index.ts'), 'utf-8'); it('提供内存级限流器并应用于 /api 全局', () => { expect(indexCode).toContain('function rateLimit(opts:'); expect(indexCode).toContain("app.use('/api', rateLimit({ name: 'global'"); expect(indexCode).toContain('操作过于频繁'); expect(indexCode).toContain('Retry-After'); }); it('高频写接口单独限流(发帖/上传/下单/支付/举报/提现等)', () => { for (const name of ['post_create', 'upload', 'order_create', 'prepay', 'report_create', 'withdraw', 'recharge', 'post_view']) { expect(indexCode).toContain(`name: '${name}'`); } }); it('5xx 响应统一脱敏且仅记录服务端日志', () => { expect(indexCode).toContain('服务器内部错误,请稍后重试'); expect(indexCode).toContain('res.statusCode >= 500'); expect(indexCode).toContain('logServerError(`http${res.statusCode}'); }); it('提供兜底错误处理,避免默认 HTML 堆栈泄露', () => { expect(indexCode).toContain('logServerError(\'unhandledError\''); }); });