use*_*687 1 node.js aws-lambda
当我尝试使用“请求”访问外部 API 并在 AWS Lambda 中获取响应时,我不知道如何正确放置“返回”代码来返回响应。
\n\nNodeJs 8.10
\n\nvar request = require(\'request\');\n\nmodule.exports.sendcode = async (event) => {\n\n let options = {\n url: \'https://api.netease.im/sms/sendcode.action?\' + content, \n method: \'POST\'\n };\n\n return await request(options, function (error, response, body) {\n console.log(body); \n return {\n statusCode: 200,\n body: JSON.stringify({\n message: body,\n input: event,\n }),\n };\n });\n};\nRun Code Online (Sandbox Code Playgroud)\n\n当我在无服务器框架中运行此代码时,我得到一个空响应,主体中没有任何内容,实际上它至少应该具有“输入”属性。
\n\n但 console.log 已经记录了 API 的实际响应。
\n\n看起来我的“返回”代码根本没有执行。\n\xef\xbc\x88如果我删除 async 和await,那么程序将挂起直到超时)
\n\n任何人都可以帮助如何修改此代码以使其工作吗?
\n请求不使用承诺,因此您的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,
})
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |