Node.js : 如何在 AWS Lambda 中进行错误处理?
Node.js : How to do error handing in AWS Lambda?
我正在使用 AWS Lambda API 网关开发 REST API。语言是 Node.js.
请检查以下代码。我在那里接受一个名为 id
的参数,然后从数据库中获取数据并将 return 作为响应返回。
const mysql = require('mysql2');
const PropertiesReader = require('properties-reader');
const prop = PropertiesReader('properties.properties');
const con = mysql.createConnection({
host : prop.get('server.host'),
user : prop.get("server.username"),
password : prop.get("server.password"),
port : prop.get("server.port"),
database : prop.get("server.dbname")
});
exports.getMilestoneStatusByID = (event, context, callback) => {
const { id } = event.queryStringParameters;
console.log("id", id);
// allows for using callbacks as finish/error-handlers
context.callbackWaitsForEmptyEventLoop = false;
const sql = "select * from milestone_status where idmilestone_status = ?";
con.execute(sql, [id], function (err, result) {
if (err) throw err;
var response = {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify(result),
"isBase64Encoded": false
};
callback(null, response)
});
};
但是,在任何情况下 id
为 null 或未提供任何参数,用户都会得到标准的 AWS 错误输出 "message": "Internal server error"
。但我需要的是传递 404 状态代码,消息为 Missing Parameters
.
我试图将 handler
中的整个块放入 try-catch
中,并尝试在 catch
中触发以下代码
var response = {
"statusCode": 404,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify("Missing Parameters"),
"isBase64Encoded": false
};
callback(null, response)
但这些都没有阻止我收到标准的 AWS 错误消息,"message": "Internal server error"
。
如何实现我正在寻找的错误?
我正在回答我自己的问题。问题不在于返回错误,而在于 null
检查。这有效。
exports.getMilestoneStatusByID =(事件、上下文、回调)=> {
const params = event.queryStringParameters;
if (!params || params.id == null) {
var response = {
"statusCode": 404,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify({ error: "Missing Parameters" }),
"isBase64Encoded": false
};
callback(null, response)
} else {
const { id } = params;
// ...
}
我正在使用 AWS Lambda API 网关开发 REST API。语言是 Node.js.
请检查以下代码。我在那里接受一个名为 id
的参数,然后从数据库中获取数据并将 return 作为响应返回。
const mysql = require('mysql2');
const PropertiesReader = require('properties-reader');
const prop = PropertiesReader('properties.properties');
const con = mysql.createConnection({
host : prop.get('server.host'),
user : prop.get("server.username"),
password : prop.get("server.password"),
port : prop.get("server.port"),
database : prop.get("server.dbname")
});
exports.getMilestoneStatusByID = (event, context, callback) => {
const { id } = event.queryStringParameters;
console.log("id", id);
// allows for using callbacks as finish/error-handlers
context.callbackWaitsForEmptyEventLoop = false;
const sql = "select * from milestone_status where idmilestone_status = ?";
con.execute(sql, [id], function (err, result) {
if (err) throw err;
var response = {
"statusCode": 200,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify(result),
"isBase64Encoded": false
};
callback(null, response)
});
};
但是,在任何情况下 id
为 null 或未提供任何参数,用户都会得到标准的 AWS 错误输出 "message": "Internal server error"
。但我需要的是传递 404 状态代码,消息为 Missing Parameters
.
我试图将 handler
中的整个块放入 try-catch
中,并尝试在 catch
var response = {
"statusCode": 404,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify("Missing Parameters"),
"isBase64Encoded": false
};
callback(null, response)
但这些都没有阻止我收到标准的 AWS 错误消息,"message": "Internal server error"
。
如何实现我正在寻找的错误?
我正在回答我自己的问题。问题不在于返回错误,而在于 null
检查。这有效。
exports.getMilestoneStatusByID =(事件、上下文、回调)=> {
const params = event.queryStringParameters;
if (!params || params.id == null) {
var response = {
"statusCode": 404,
"headers": {
"Content-Type": "application/json"
},
"body": JSON.stringify({ error: "Missing Parameters" }),
"isBase64Encoded": false
};
callback(null, response)
} else {
const { id } = params;
// ...
}