Nodejs API 调用将未定义返回到 lambda 函数

2024-03-03

这是将调用 api 的 aws lambda 函数:

'use strict';

var request = require("request")

exports.handler = function (event, context,callback) {



let url = "https://3sawt0jvzf.execute-api.us-east-1.amazonaws.com/prod/test"

request({
    url: url,
    method: "POST",
    json: event,

}, function (error, response, body) {
    if (!error && response.statusCode === 200) {
        callback(null, { "isBase64Encoded": true|false,
                          "statusCode": "200",
                          "headers": { "headerName": "headerValue"},
                          "body": body});
    }
    else {

        console.log("error: " + error)
        console.log("response.statusCode: " + response.statusCode)
        console.log("response.statusText: " + response.statusText)
    }
})
};

这是用 aws lambda 函数编写的 api:

'use strict';


exports.handler = function(event, context, callback) {
console.log(event.name);
callback(null, { "isBase64Encoded": true|false,
                 "statusCode": "200",
                 "headers": { "headerName": "headerValue"},
                 "body": `Hello World ${event.name}`});  // SUCCESS with message
};

当我尝试从 lambda 函数调用 api 时,它只返回“Hello World undefined”。它不会在末尾附加名称并返回正确的响应。


假设:

  • 您正在使用 Lambda 代理集成。
  • 您希望将第一个 Lambda 收到的完全相同的负载传递给第二个 Lambda。*

你误解了什么event是。这不是您通过 HTTP 请求发送的 JSON 有效负载。

通过 API 网关的 HTTP 请求被转换为event与此类似的对象:

{
    "resource": "Resource path",
    "path": "Path parameter",
    "httpMethod": "Incoming request's method name"
    "headers": {Incoming request headers}
    "queryStringParameters": {query string parameters }
    "pathParameters":  {path parameters}
    "stageVariables": {Applicable stage variables}
    "requestContext": {Request context, including authorizer-returned key-value pairs}
    "body": "A JSON string of the request payload."
    "isBase64Encoded": "A boolean flag to indicate if the applicable request payload is Base64-encode"
}

正如您所看到的,JSON 有效负载可以以字符串形式访问event.body.

如果您想将相同的有效负载发送给第二个 Lambda,则必须先对其进行解析。

const body = JSON.parse(event.body)

然后,发送body代替event.

然后,在第二个 Lambda 中,解析字符串化的 JSONevent.body然后你就可以恢复原来的有效负载了。

如果您发送name在原始有效负载中,您可以从JSON.parse(event.body).name.

参考:http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-set-up-simple-proxy.html#api-gateway-simple-proxy-for-lambda-input-format

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs API 调用将未定义返回到 lambda 函数 的相关文章

随机推荐

  • Djangocms 中的自定义视图?

    我还没有找到令人满意的方法 我有一个运行良好的 djangocms 设置 但我需要将 CMS 外部表格中的内容添加到我的主页 并在模板上呈现该内容 我可以做到这一点 但在 CMS 中编辑 urls py 以使用我的视图 如下所示 url r
  • 我可以使用 conda 安装 Python 的 alpha 或 beta 版本吗?

    在撰写本文时 alpha 版本3 8 0a4python 可用 我想在正式发布之前在 conda 环境中进行一些测试 出于教育目的并满足一些好奇心 当尝试 conda install 3 8 时 我得到了PackagesNotFoundEr
  • 为什么 stylelint vscode 扩展在我的计算机上不起作用?

    我遵循guide https marketplace visualstudio com items itemName stylelint vscode stylelint安装stylelintvscode 扩展 但它在我的电脑上不起作用 我
  • 在R中查找另一个字符串中的一个字符串

    我想在R中的另一个字符串中查找一个字符串 字符串如下 我希望能够将字符串 a 与字符串 b 匹配 输出应该是a b返回 TRUE a lt 6250 7250 6251 b lt 7250 a b FALSE 您可以使用regmatches
  • D3:在多条线的折线图中跳过空值

    我有一个动态数组来显示包含多条线的折线图 例子 var data x 2005 y 100 x 2007 y 96 5 x 2009 y 100 3 x 2011 y 102 3 x 2005 y 100 x 2007 y 105 x 20
  • 通过 PHP 从目录中的文件生成 XML

    我有两个文件夹图像和带照片的大图像 我想生成一个具有两个属性的 XML 文件 如下所示
  • MYSQL 中的字符串连接

    我怎样才能在mysql中连接这个字符串 desc desc desct 我想要的是每次我从 PHP 插入一个变量时 该字符串都会添加到已经在 db 中并用分隔符分隔的字符串中 字段描述应该是这样的 desc 10 30 90 710 假设我
  • 是否会使应用程序不可见?

    我使用了隐式意图 以便在有人单击其他应用程序中的 URL 时打开我的应用程序 我无法看到已部署的应用程序的图标 部署我的应用程序后 如果我返回并尝试找到我的应用程序 我将无法找到它 但它在最近的应用程序中 这是android清单中的代码
  • 为 php 5.6 添加 mongodb 扩展(XAMPP)

    我在这里读过一些关于解决我的问题的帖子 但都不适用于 php 5 6 我下载了php mongo 1 6 8 zip and php mongo 1 6 7 zip并尝试了所有 dll 扩展名 所有扩展名都给出了一个或另一个错误 错误信息
  • 如何为 LLVM IR 生成元数据?

    我正在尝试为我生成的 LLVM IR 生成元数据 我想生成以下形式的元数据 nvvm annotations 0 0 metadata void foo metadata kernel i32 1 其中 foo 是我的 LLVM IR 中的
  • orchard cms:如何将媒体选择器字段添加到自定义部分

    我的问题类似于questions 10369967 orchard cms 如何将媒体选择器字段添加到新模块 https stackoverflow com questions 10369967 orchard cms how to add
  • 我应该在 SharpZipLib 中选择哪种压缩类型?

    我有一个发送文件和文件夹的文件传输应用程序 服务器 客户端 我正在尝试通过 TCP 套接字 发送数据 我已经为传输数据的方式制定了一些规则 因此 如果它发送包含许多文件的大文件夹 则应首先将它们压缩为单个 zip 文件 然后再发送发送的 z
  • 领域模型模式示例

    我只是想找一些 Martin Fowler 的例子领域模型 http martinfowler com eaaCatalog domainModel html模式 而我不能 根据我在互联网领域模型上发现的内容 只是向类添加一些 逻辑 方法
  • 如何防止 PyCharm 覆盖 matplotlib 中设置的默认后端?

    我已将默认后端设置为Qt5Agg in config matplotlib matplotlibrc 如果我使用常规 ssh 提示符并打开 这会起作用ipython并运行import matplotlib as mpl 我正确地得到 mpl
  • 带时间戳零的 PHP 日期返回 1 小时

    如果我执行以下操作 date H i s 0 它返回01 00 00 同时它should give 00 00 00 它可能与我的本地主机的时区有关吗 世界标准时间 1 如果是这样 我该如何解决这个问题 致电前设置时区date 你将使用da
  • 为什么在SciPy中使用integrate.odeint时不调用Dfun(gradient)?

    任何人都可以提供一个向 a 提供雅可比行列式的示例吗 integrate odeintSciPy 中的函数 我尝试从 SciPy 教程运行此代码代码示例 http docs scipy org doc scipy dev reference
  • gwt 中的会话管理

    我正在开发 GWT ext 应用程序 在此应用程序中 我管理客户端会话 为此我写了下面的代码 管理会话 导入 com google gwt user client Timer public class ClientTimers privat
  • 创建霍夫曼树时增加权重时哪个节点向左或向右

    我正在尝试创建一棵霍夫曼树 但阅读互联网上的几个链接时我有点困惑 有些在左侧添加较大 就权重而言 的子节点 有些在右侧添加 所以我的问题是 1 在哪里添加节点 左边还是右边 真的有问题吗 2 我可以在右侧添加权重较大的节点还是在左侧添加权重
  • 使用映射与记录之间的差异以及何时使用

    我正在尝试将一些使用 Map 的 Java 代码映射到 Typescript 代码 我最初的想法是在 Typescript 中使用 Map 但对于我创建的界面来说这并没有成功 相反 我发现 Records 似乎完美地模拟了 Java 的 M
  • Nodejs API 调用将未定义返回到 lambda 函数

    这是将调用 api 的 aws lambda 函数 use strict var request require request exports handler function event context callback let url