node.js - 如何在 AWS Lambda 中使用 Nodejs "request"work aysn?

标签 node.js aws-lambda

当我尝试使用“请求”访问外部 API 并在 AWS Lambda 中获取响应时,我不知道如何正确放置“返回”代码来返回响应。

NodeJs 8.10

var request = require('request');

module.exports.sendcode = async (event) => {

  let options = {
    url: 'https://api.netease.im/sms/sendcode.action?' + content, 
    method: 'POST'
  };

  return await request(options, function (error, response, body) {
    console.log(body); 
    return {
      statusCode: 200,
      body: JSON.stringify({
        message: body,
        input: event,
      }),
    };
  });
};

当我在无服务器框架中运行此代码时,我得到一个空响应,正文中没有任何内容,实际上它至少应该具有“input”属性。

但是 console.log 已经记录了来自 API 的实际响应。

看起来我的“返回”代码根本没有执行。 (如果我删除async和await,那么程序会挂起直到超时)

任何人都可以帮助如何修改此代码以使其正常工作吗?

最佳答案

Request 不使用 promise ,因此您的 await 关键字没有执行任何操作。如果你想使用带有请求的 Promise,你需要找到一个支持 Promise 的库,如下所示:https://www.npmjs.com/package/request#promises--asyncawait一个流行的选项是 https://github.com/request/request-promise-native

但是,只需将请求包装在 Promise 中是一件简单的事情,这样您就不需要使用其他依赖项

var request = require('request');

const requestHandler = (options) => new Promise((resolve, reject) => {
  request(options, (error, response, body) => {
    if (error) {
      console.error(error);
      reject(error);
    } else {
      console.log(response, body);
      resolve({ response, body });
    }
  });
});

module.exports.sendcode = async (event) => {

  let options = {
    url: 'https://api.netease.im/sms/sendcode.action?' + content, 
    method: 'POST'
  };
  const { response, body } =  await requestHandler(options);
  return {
    statusCode: 200,
    body: JSON.stringify({
      message: body,
      input: event,
    })
  }
};

关于node.js - 如何在 AWS Lambda 中使用 Nodejs "request"work aysn?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55822457/

相关文章:

node.js - OpenAI API 给出错误 : 429 Too Many Requests

javascript - AWS Lambda 和 promise : Callbacks not being called

amazon-web-services - AWS Lambda 请求/事件的最大负载大小?

amazon-web-services - 标记 AWS lambda 函数访问被拒绝

aws-lambda - 授予 CloudWatch 对使用无服务器框架部署的 lambda 函数的访问权限

node.js - 带有 docker 的 Mongo 副本 Node

jquery - 在 node.js 服务器和 jQuery 客户端之间建立安全连接

javascript - Mongoose - 分组、计数并在集合中找不到任何内容时返回 0

javascript - 将本地文件从 Electron 推送到 PHP 服务器

c# - .NET 二进制文件缺少 AWS Lambda