我正在尝试使用lambda节点16 TypeScript向SQS发送消息。
如果我在本地运行它,代码可以工作。但是如果我在外部运行它,我会得到这个错误:
TypeError: The "input" Received type object ([object Object])
//full message is actually part of the response body:
//"{\"message\":\"Error: failed to schedule userflow test\\nTypeError: The \\\"input\\\" argument must be ArrayBuffer. Received type object ([object Object])\"}"
函数非常简单:
import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';
import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs";
export const lambdaHandler = async (event: APIGatewayProxyEvent): Promise<APIGatewayProxyResult> => {
let response: APIGatewayProxyResult;
let messageBody: string;
if (!event.body) {
response = {
statusCode: 500,
body: JSON.stringify({
message: 'No Target Information Found',
}),
};
return response;
} else {
response = {
statusCode: 200,
body: JSON.stringify({
message: 'hello world',
}),
};
messageBody = event.body;
}
const client = new SQSClient({ region: "us-east-1" });
const params = {
MessageBody: messageBody,
QueueUrl: "https://sqs.us-east-1.amazonaws.com/41111111119/scheduled-userflows"
}
const command = new SendMessageCommand(params);
try {
await client.send(command);
} catch (error) {
response = {
statusCode: 500,
body: JSON.stringify({
message: 'Error: failed to schedule userflow test\n' + error,
}),
};
} finally {
return response;
}
};
那是什么意思?
为什么这种情况只发生在Lambda上,而不是在本地?
这是为了达到这个目的:How can I execute a puppeteer script in the cloud as a single task?
1条答案
按热度按时间laik7k3q1#
输入对象中的MessageBody属性应该是字符串,而不是对象。可以先将对象转换为字符串,然后再将其传递给MessageBody属性。