In my lambda node code, I am trying to make a call to my SQL DB and retrieve my data.
I am using promises and am able to get the data successfully. However, I am not able to implement error handling as per the requirements.
My requirements are that -
- At 'function' level, I return response through 1 variable.
- Have one catch statement to catch any errors in the Promise Chain
- In case of error, include it and send back as a JSON object.
Below is my code:
'use script';
const mysql = require('mysql');
let res, SQL;
module.exports = async (event, context, callback) => {
const connection = mysql.createConnection ({
host: process.env.HOST,
user: process.env.DBUSER,
password: process.env.DBPASSWORD,
database: process.env.INSTANCE,
port: process.env.PORT,
connectionLimit: process.env.CONNECTION_LIMIT,
multipleStatements: false
});
SQL = ` SELECT
*
FROM
supplie
WHERE
isActive=1;`;
await new Promise( (resolve, reject) => {
connection.connect(function (err) {
if (err) { console.log(err); }
connection.query(SQL, (err, result) => {
console.log(err);
resolve(result);
});
});
}).then( (result, err ) => {
{
res = {
"statusCode" : 200,
"body": JSON.stringify(result),
"headers" : {
"Access-Control-Allow-Origin" : "*"
}
};
return res;
}
}).catch ( err => {
console.error('Something Went Wrong');
console.log(err);
res = {
"statusCode" : 404,
"body": JSON.stringify('Something went wrong!'),
"headers" : {
"Access-Control-Allow-Origin" : "*"
}
};
throw err;
}).finally( () => {
return new Promise((resolve, reject) => {
connection.end(error => error ? reject(error) : resolve());
});
});
// returning response to the function
return res;
};
Below is the logs and output: Response:
{
"statusCode": 200,
"headers": {
"Access-Control-Allow-Origin": "*"
}
}
Request ID:
"1fc0c996-8e75-4c0d-b9c9-3757db0a4809"
Function logs:
START RequestId: 1fc0c996-8e75-4c0d-b9c9-3757db0a4809 Version: $LATEST
2020-07-22T17:46:21.117Z 1fc0c996-8e75-4c0d-b9c9-3757db0a4809 INFO Error: ER_NO_SUCH_TABLE: Table 'supplier_svc_db_dev.supplie' doesn't exist
at Query.Sequence._packetToError (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:47:14)
at Query.ErrorPacket (/var/task/node_modules/mysql/lib/protocol/sequences/Query.js:79:18)
at Protocol._parsePacket (/var/task/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/var/task/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/var/task/node_modules/mysql/lib/protocol/Parser.js:43:10)
at Protocol.write (/var/task/node_modules/mysql/lib/protocol/Protocol.js:38:16)
at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:88:28)
at Socket.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:526:10)
at Socket.emit (events.js:310:20)
at addChunk (_stream_readable.js:286:12)
--------------------
at Protocol._enqueue (/var/task/node_modules/mysql/lib/protocol/Protocol.js:144:48)
at Connection.query (/var/task/node_modules/mysql/lib/Connection.js:198:25)
at Handshake.<anonymous> (/var/task/helpers/testPromise.js:28:24)
at Handshake.<anonymous> (/var/task/node_modules/mysql/lib/Connection.js:526:10)
at Handshake._callback (/var/task/node_modules/mysql/lib/Connection.js:488:16)
at Handshake.Sequence.end (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:83:24)
at Handshake.Sequence.OkPacket (/var/task/node_modules/mysql/lib/protocol/sequences/Sequence.js:92:8)
at Protocol._parsePacket (/var/task/node_modules/mysql/lib/protocol/Protocol.js:291:23)
at Parser._parsePacket (/var/task/node_modules/mysql/lib/protocol/Parser.js:433:10)
at Parser.write (/var/task/node_modules/mysql/lib/protocol/Parser.js:43:10) {
code: 'ER_NO_SUCH_TABLE',
errno: 1146,
sqlMessage: "Table 'supplier_svc_db_dev.supplie' doesn't exist",
sqlState: '42S02',
index: 0,
sql: ' SELECT \n' +
' *\n' +
' FROM\n' +
' supplie\n' +
' WHERE\n' +
' isActive=1;'
}
END RequestId: 1fc0c996-8e75-4c0d-b9c9-3757db0a4809
REPORT RequestId: 1fc0c996-8e75-4c0d-b9c9-3757db0a4809 Duration: 805.03 ms Billed Duration: 900 ms Memory Size: 1024 MB Max Memory Used: 74 MB Init Duration: 142.20 ms
Expected Output:
{
"statusCode" : 404,
"body": JSON.stringify('Something went wrong!'),
"headers" : {
"Access-Control-Allow-Origin" : "*"
}
};
Any help would be appreciated.
Warm Regards, Adi