45 lines
1.9 KiB
JavaScript
45 lines
1.9 KiB
JavaScript
/**
|
|
* Parses a query parameter value based on its expected type.
|
|
* Throws error for invalid formats. Adjust date handling as needed.
|
|
*/
|
|
function parseValue(value, type) {
|
|
if (value === null || value === undefined || value === '') return null;
|
|
|
|
console.log(`Parsing value: "${value}" as type: "${type}"`);
|
|
|
|
switch (type) {
|
|
case 'number':
|
|
const num = parseFloat(value);
|
|
if (isNaN(num)) {
|
|
console.error(`Invalid number format: "${value}"`);
|
|
throw new Error(`Invalid number format: "${value}"`);
|
|
}
|
|
return num;
|
|
case 'integer': // Specific type for integer IDs etc.
|
|
const int = parseInt(value, 10);
|
|
if (isNaN(int)) {
|
|
console.error(`Invalid integer format: "${value}"`);
|
|
throw new Error(`Invalid integer format: "${value}"`);
|
|
}
|
|
console.log(`Successfully parsed integer: ${int}`);
|
|
return int;
|
|
case 'boolean':
|
|
if (String(value).toLowerCase() === 'true') return true;
|
|
if (String(value).toLowerCase() === 'false') return false;
|
|
console.error(`Invalid boolean format: "${value}"`);
|
|
throw new Error(`Invalid boolean format: "${value}"`);
|
|
case 'date':
|
|
// Basic ISO date format validation (YYYY-MM-DD)
|
|
if (!String(value).match(/^\d{4}-\d{2}-\d{2}$/)) {
|
|
console.warn(`Potentially invalid date format passed: "${value}"`);
|
|
// Optionally throw an error or return null depending on strictness
|
|
// throw new Error(`Invalid date format (YYYY-MM-DD expected): "${value}"`);
|
|
}
|
|
return String(value); // Send as string, let DB handle casting/comparison
|
|
case 'string':
|
|
default:
|
|
return String(value);
|
|
}
|
|
}
|
|
|
|
module.exports = { parseValue }; |