在异步 AWS Lambda 函数中使用 node.js w/node-fetch 模块时遇到问题
trouble using node.js w/ node-fetch module in async AWS Lambda Function
这是我正在尝试做的事情:我有一个由 webhook 触发的 lambda 函数,它将处理该数据并使用它向 api 发出 POST 请求。
我正在使用 Node.js 12 和节点获取模块。
现在函数被正确触发,但它不会在第一次调用时发送 POST。但是如果我在短时间内反复触发lambda函数,第一次之后的请求都会通过。
这是我的 lambda 函数 index.js 文件中的代码:
const fetch = require('node-fetch');
exports.handler = async (event) => {
sendPost();
const response = {
statusCode: 200,
body: "Ok",
};
return response;
};
function sendPost() {
const url = "http://requestbin.net/r/vjv4mvvj";
const body = {
foo: "foo",
bar: "bar",
baz: "baz"
};
const params = {
method: "POST",
mode: "cors",
headers: {"Content-Type":"application/json"},
body: JSON.stringify(body)
};
fetch(url, params);
}
当我删除(event)前面的async时,请求第一次通过,但是服务器首先发送 webhook 没有得到响应。
所以基本上我需要 POST 每次调用函数时发送并且还能够 return 200 状态代码。
我没有太多使用异步的经验,所以我知道它与此有关,但我摸不着头脑。
获取returns一个承诺,你需要一个await
。您还需要将 sendPost
函数标记为 async
。您还需要处理函数来等待 sendPost
函数完成。
const fetch = require('node-fetch');
exports.handler = async (event) => {
await sendPost();
const response = {
statusCode: 200,
body: "Ok",
};
return response;
};
async function sendPost() {
const url = "http://requestbin.net/r/vjv4mvvj";
const body = {
foo: "foo",
bar: "bar",
baz: "baz"
};
const params = {
method: "POST",
mode: "cors",
headers: {"Content-Type":"application/json"},
body: JSON.stringify(body)
};
await fetch(url, params);
}
这是我正在尝试做的事情:我有一个由 webhook 触发的 lambda 函数,它将处理该数据并使用它向 api 发出 POST 请求。
我正在使用 Node.js 12 和节点获取模块。
现在函数被正确触发,但它不会在第一次调用时发送 POST。但是如果我在短时间内反复触发lambda函数,第一次之后的请求都会通过。
这是我的 lambda 函数 index.js 文件中的代码:
const fetch = require('node-fetch');
exports.handler = async (event) => {
sendPost();
const response = {
statusCode: 200,
body: "Ok",
};
return response;
};
function sendPost() {
const url = "http://requestbin.net/r/vjv4mvvj";
const body = {
foo: "foo",
bar: "bar",
baz: "baz"
};
const params = {
method: "POST",
mode: "cors",
headers: {"Content-Type":"application/json"},
body: JSON.stringify(body)
};
fetch(url, params);
}
当我删除(event)前面的async时,请求第一次通过,但是服务器首先发送 webhook 没有得到响应。
所以基本上我需要 POST 每次调用函数时发送并且还能够 return 200 状态代码。
我没有太多使用异步的经验,所以我知道它与此有关,但我摸不着头脑。
获取returns一个承诺,你需要一个await
。您还需要将 sendPost
函数标记为 async
。您还需要处理函数来等待 sendPost
函数完成。
const fetch = require('node-fetch');
exports.handler = async (event) => {
await sendPost();
const response = {
statusCode: 200,
body: "Ok",
};
return response;
};
async function sendPost() {
const url = "http://requestbin.net/r/vjv4mvvj";
const body = {
foo: "foo",
bar: "bar",
baz: "baz"
};
const params = {
method: "POST",
mode: "cors",
headers: {"Content-Type":"application/json"},
body: JSON.stringify(body)
};
await fetch(url, params);
}