【发布时间】:2021-07-23 16:38:08
【问题描述】:
我正在使用 AWS Lambda API Gateway 开发一个 REST API。语言是 Node.js。
请检查以下代码。在那里我接受一个名为id 的参数,然后从数据库中获取数据并作为响应返回。
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"。
如何实现我正在寻找的错误?
【问题讨论】:
-
在这些情况下你是否看到了 lambda 调用? api网关是否已经拒绝请求? 如果代码确实被执行了,你不应该把它放在try-catch中,而是检查是否给出了
id,然后做出相应的回复。 -
@luk2302:当代码在 try catch 中时,
catchnever 没有被执行。这就像response被卡住了,因为POSTMAN一直在运行而没有响应。你是对的。你能给我一个解决这个问题的代码示例吗? -
@luk2302:无论如何,我实际上尝试通过尝试
if(!id)来检查ID是否为空,但无论如何都会触发默认错误。
标签: javascript node.js error-handling aws-lambda aws-api-gateway