pet/http/utils/validator.js

81 lines
2.4 KiB
JavaScript
Raw Permalink 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.

// HTTP请求参数验证工具
/**
* 验证必需参数
* @param {Object} params 参数对象
* @param {Array} requiredFields 必需字段数组
* @param {String} apiName API名称用于错误提示
* @throws {Error} 参数验证失败时抛出错误
*/
export function validateRequired(params, requiredFields, apiName = 'API') {
if (!params || typeof params !== 'object') {
throw new Error(`${apiName}: 参数不能为空`)
}
for (const field of requiredFields) {
if (params[field] === undefined || params[field] === null || params[field] === '') {
throw new Error(`${apiName}: 缺少必需参数 ${field}`)
}
}
}
/**
* 验证ID参数
* @param {String|Number} id ID值
* @param {String} fieldName 字段名称
* @param {String} apiName API名称
* @throws {Error} ID验证失败时抛出错误
*/
export function validateId(id, fieldName = 'id', apiName = 'API') {
if (!id || (typeof id !== 'string' && typeof id !== 'number')) {
throw new Error(`${apiName}: ${fieldName} 不能为空且必须是字符串或数字`)
}
if (typeof id === 'string' && id.trim() === '') {
throw new Error(`${apiName}: ${fieldName} 不能为空字符串`)
}
if (typeof id === 'number' && (id <= 0 || !Number.isInteger(id))) {
throw new Error(`${apiName}: ${fieldName} 必须是正整数`)
}
}
/**
* 验证分页参数
* @param {Object} params 分页参数
* @param {String} apiName API名称
*/
export function validatePagination(params, apiName = 'API') {
if (params.page !== undefined) {
if (!Number.isInteger(params.page) || params.page < 1) {
throw new Error(`${apiName}: page 必须是大于0的整数`)
}
}
if (params.limit !== undefined) {
if (!Number.isInteger(params.limit) || params.limit < 1 || params.limit > 100) {
throw new Error(`${apiName}: limit 必须是1-100之间的整数`)
}
}
}
/**
* 验证文件上传参数
* @param {Object} fileData 文件数据
* @param {String} apiName API名称
*/
export function validateFileUpload(fileData, apiName = 'API') {
if (!fileData || typeof fileData !== 'object') {
throw new Error(`${apiName}: 文件数据不能为空`)
}
if (!fileData.filePath || typeof fileData.filePath !== 'string') {
throw new Error(`${apiName}: filePath 不能为空且必须是字符串`)
}
// 验证文件路径格式(简单验证)
if (!fileData.filePath.includes('/') && !fileData.filePath.includes('\\')) {
throw new Error(`${apiName}: filePath 格式不正确`)
}
}