zhizhi/guanghulab-main/src/middleware/hli-validator.middleware.js

45 lines
1.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// src/middleware/hli-validator.middleware.js
// HLI Schema 自动校验中间件:根据路由自动加载对应 schema 校验请求体
const fs = require('fs');
const path = require('path');
module.exports = function hliValidator(req, res, next) {
// 从路径中解析 domain 和 action例如 /hli/auth/login → auth/login
const match = req.path.match(/^\/hli\/([^/]+)\/([^/]+)/);
if (!match) return next();
const [, domain, action] = match;
const schemaPath = path.join(
__dirname,
'../schemas/hli',
domain,
`${action}.schema.json`
);
if (!fs.existsSync(schemaPath)) return next();
let schema;
try {
schema = JSON.parse(fs.readFileSync(schemaPath, 'utf8'));
} catch (_) {
return next();
}
// 简单必填字段校验(生产环境可替换为 ajv 等标准校验库)
const required = schema.input && schema.input.required;
if (required && req.method !== 'GET') {
for (const field of required) {
if (req.body[field] === undefined || req.body[field] === '') {
return res.status(400).json({
error: true,
code: 'VALIDATION_ERROR',
message: `缺少必填字段: ${field}`,
});
}
}
}
next();
};