I've been writing a system that handles my responses received via an API, however it seems that my whole get
function has become very messy & unmanageable?
What's the correct way to handle such statements instead of multiple if
checks?
const getOrder = async (req, res) => {
let response;
console.log(req.body);
let params = await parser.parseStringPromise(req.body.parameters);
if(typeof params.PARAMETERS.ID === undefined) {
return res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
}
let imei = params.PARAMETERS.ID;
let solution = await client.get(imei);
if(solution === null || solution === undefined) {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
} else {
//check for major error first!
let check_error = await client.get('error-' + imei);
if(check_error !== null) {
await client.del('error-' + imei);
response = res.send(success_response({
'STATUS': 3,
'CODE': 'api_error'
}));
} else {
solution = JSON.parse(solution);
if (solution.orderNumber === undefined && solution.error === undefined) {
response = res.send(success_response({
'STATUS': 1
}));
}
if (solution.orderNumber !== undefined) {
const result = await orderStatus(solution.imei, solution.orderNumber, solution.token, solution.tokenRefId);
if (result.data.reason === 'EMAIL_CONFIRMATION') {
response = res.send(success_response({
'STATUS': 1
}));
} else if (result.data.unlockStatus === 'IN-PROGRESS') {
response = res.send(success_response({
'STATUS': 1
}));
} else if(result.data.unlockStatus === 'APPROVED') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'Unlocked'
}));
} else if(result.data.unlockStatus === 'DENIED') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'Denied - ' + result.data.reason
}));
} else {
response = res.send(success_response({
'STATUS': 1
}));
}
}
if (solution.error !== undefined) {
if (solution.error === 'server_error') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'server_error'
}));
} else if (solution.error === 'email_api' || solution.error === 'captcha_api') {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'api_offline - ' + solution.error
}));
} else if (solution.errorCode === 'ULP_1103') {
//captcha api service provided wrong answer
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Resend Order'
}));
} else {
response = res.send(success_response({
'STATUS': 4,
'CODE': solution.error
}));
}
//await client.del(imei);
}
}
}
return response;
}
I would make some helper functions that I could call. Some sort of helper class maybe.
otherwise I would stop nesting your subsequent if statements inside else statements and let the code read naturally from top to bottom. So such that
if(solution === null || solution === undefined) {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
return;
}
let check_error = await client.get('error-' + imei);
if (check_error) {
await client.del('error-' + imei);
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
return;
}
.
.
.
If you want to write a function that checks if a variable has any value you can make a helper function that looks something like this:
function isNullUndefinedOrEmpty(value) {
let res = (typeof value === undefined) ? true : false;
switch (value) {
case undefined:
res = true
break;
case null:
res = true
break;
case '':
res = true
break;
case '{}':
res = true
break;
default:
res = false
break;
}
if(!res) {
if(value.constructor === Object) {
if(Object.keys(value).length === 0) {
res = true
}
}
}
return res
}
That way you can now call:
if(isNullUndefinedOrEmpty(solution)) {
// Value was evaluated as empty - handle error here and return
}
Snippet for demonstrating the helper function
function isNullUndefinedOrEmpty(value) { let res = (typeof value === undefined)? true: false; switch (value) { case undefined: res = true break; case null: res = true break; case '': res = true break; case '{}': res = true break; default: res = false break; } if (.res) { if (value.constructor === Object) { if (Object.keys(value).length === 0) { res = true } } } return res } console.log(isNullUndefinedOrEmpty("")) console.log(isNullUndefinedOrEmpty("Nonempty string")) console.log(isNullUndefinedOrEmpty(undefined)) console.log(isNullUndefinedOrEmpty(null)) console.log(isNullUndefinedOrEmpty({})) console:log(isNullUndefinedOrEmpty({'key'. 'MyVal'})) console.log(isNullUndefinedOrEmpty('{}'))
Your choice really:)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.