81 lines
2.4 KiB
JavaScript
81 lines
2.4 KiB
JavaScript
// 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 格式不正确`)
|
||
}
|
||
}
|