【发布时间】:2021-09-29 10:07:37
【问题描述】:
我编写了一个 lambda 函数,该函数由我创建的 rest API 网关触发。其余 API 有两个参数 ingr 和 upc。奇怪的部分是在 lambda 函数中,事件对象实际上是未定义的。我遇到了一些奇怪的交互,每当我尝试将 lambda 链接到触发网关 API 时,它都会在已部署的网关内创建一个新的 ANY 方法,我不确定它为什么会这样做。我可以删除该方法,然后将其从触发器中删除,它现在只显示两参数触发器,但也许这可能是我的问题的一部分?
这是我的 API 网关资源和方法。
下面是我的 lambda 函数的代码。
'use strict';
const https = require('https');
exports.handler = (event, context, callback) => {
// API Key
let app_key = process.env.API_Key;
let app_id = process.env.APP_Id;
let ingr = event.pathParameters.ingr != 'null' ? event.pathParameters.ingr : '';
let upc = event.pathParameters.upc != 'null' ? event.pathParameters.upc : '';
let optionals = ingr + upc;
// Set the options for the https request
const options = {
hostname: "api.edamam.com",
path: "/api/food-database/v2/parser?" + "app_id=" + app_id + "&app_key=" + app_key + optionals,
method: "GET"
};
// Make the https request
const req = https.request(options, (res) => {
let body = '';
res.setEncoding('utf8');
res.on('data', (chunk) => body += chunk);
res.on('end', () => {
let response = {
"statusCode": res.statusCode,
"headers": {
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token",
"Access-Control-Allow-Credentials": true,
"Content-Type": "application/json"
},
"body": body
}
callback(null, response);
});
});
req.on('error', callback);
req.end();
};
谁能帮我弄清楚为什么事件参数最终未定义?
【问题讨论】:
-
你为什么说
event(或path params)是未定义的?...rs.ingr != 'null'这个逻辑看起来不太正常,我们试试let ingr = event.pathParameters.ingr || ''; -
@hoangdv 将逻辑更改为该逻辑不会改变任何内容,因为当我出于某种原因调用时对象事件未定义。我仍然会收到相同的类型错误,说它找不到 ingr,因为它是未定义的。我知道事件未定义的原因是因为我已在控制台中将其打印出来进行测试,即使我正确传递了参数,它也总是未定义
-
确保您使用 Lambda-Proxy 集成来连接 api 网关和 lambda 函数。
标签: javascript node.js amazon-web-services aws-lambda aws-api-gateway