Node.js AWS中的节点函数在参数列表后抛出“缺失”错误

Node.js AWS中的节点函数在参数列表后抛出“缺失”错误,node.js,amazon-web-services,aws-lambda,Node.js,Amazon Web Services,Aws Lambda,我在AWS中创建了一个Lambda函数Node.js 12.x,因此SNS消息从我们的ETL工具Matillion推送到Slack console.log('Loading function'); const https = require('https'); const url = require('url'); const slack_url = 'https://hooks.slack.com/services/T1MJBHQ95/B01DQ60NUR2/....'; const sla

我在AWS中创建了一个Lambda函数Node.js 12.x,因此SNS消息从我们的ETL工具Matillion推送到Slack

console.log('Loading function');

const https = require('https');
const url = require('url');
const slack_url = 'https://hooks.slack.com/services/T1MJBHQ95/B01DQ60NUR2/....';
const slack_req_opts = url.parse(slack_url);
slack_req_opts.method = 'POST';
slack_req_opts.headers = { 'Content-Type': 'application/json' };

exports.handler = function (event, context) {
        (event.Records || []).forEach(function (rec) {
                if (rec.Sns) {
                    var req = https.request(slack_req_opts, function (res) {
                        if (res.statusCode === 200) {
                            context.succeed('sns posted to slack');
                        }
                        else {
                            context.fail('status code: ' + res.statusCode);
                        }
                    });

                    req.on('error', function (e) {
                        console.log('problem with request: ' + e.message);
                        context.fail(e.message);
                    });

                    req.write(JSON.stringify({ text: `${rec.Sns.Message}` }));

                        req.end();
                    }
                });
        };
函数将失败,并出现“缺少后参数列表”语法错误。我在Sublime中运行它,它在require和exports未定义时抛出一个错误

我的研究显示了几个挑战:

我可能需要一个名为eslint.rc的文件,但我不清楚为什么需要将 在里面 require和exports的使用似乎已被弃用。
有人能给我指点一下如何解决这个问题吗?谢谢。

只需使用Axios,它将使您的生活更轻松:

控制台。日志“加载功能”; const axios=需要“axios”; const url=需要“url”; 常数松弛https://hooks.slack.com/services/T1MJBHQ95/B01DQ60NUR2/....'; exports.handler=异步事件,上下文{ event.Records | |[]forEachfunctionrec{ 如果记录Sns{ axios.postslack\u url{ 文本:rec.Sns.Message }, { “内容类型”:“应用程序/json” }.doner=>{ 成功“sns发布到slack”; }.catch=>{ context.fail“状态代码:”+e.statusCode; }; }; 注意,在您的代码中,在1个sns事件之后,他结束调用,而不是全部运行,要运行所有调用,您需要等待所有请求完成,可以使用Promise.all例如

另外,请注意,sns可以直接发送到HTTPS而无需任何代码


顺便说一句,您可以使用一个外部监控工具,该工具将准确地向您显示作为Lumigo的传出请求+所有有效负载作为免责声明我为一家名为Lumigo的公司工作。只要使用Axios,您的生活就会更轻松:

控制台。日志“加载功能”; const axios=需要“axios”; const url=需要“url”; 常数松弛https://hooks.slack.com/services/T1MJBHQ95/B01DQ60NUR2/....'; exports.handler=异步事件,上下文{ event.Records | |[]forEachfunctionrec{ 如果记录Sns{ axios.postslack\u url{ 文本:rec.Sns.Message }, { “内容类型”:“应用程序/json” }.doner=>{ 成功“sns发布到slack”; }.catch=>{ context.fail“状态代码:”+e.statusCode; }; }; 注意,在您的代码中,在1个sns事件之后,他结束调用,而不是全部运行,要运行所有调用,您需要等待所有请求完成,可以使用Promise.all例如

另外,请注意,sns可以直接发送到HTTPS而无需任何代码


顺便说一句,你可以使用一个外部监控工具,它会准确地向你显示作为Lumigo的传出请求+所有有效负载。作为免责声明,我为一家名为Lumigo的公司工作。你在代码中犯了语法错误

req.write(JSON.stringify({ text: `${rec.Sns.Message}` }));
req.end();

需要在req.write语句之前添加。

您的代码中有语法错误

req.write(JSON.stringify({ text: `${rec.Sns.Message}` }));
req.end();
需要在您的req.write语句之前添加。

我解决了我的问题:

我在文件/*eslint env节点common的顶部添加了以下语句*/ 我重新部署了我的功能。 我相信重新部署该功能成功了。

我解决了我的问题:

我在文件/*eslint env节点common的顶部添加了以下语句*/ 我重新部署了我的功能。
我相信函数的重新部署起到了作用。

这在本地起作用?如果可能,添加完整的错误跟踪,您可以在CloudWatch日志或lambda执行日志中找到,但在本地不起作用。Require和Exports是基于服务器的。@user14579431 Require和Exports是基于服务器的,这是什么意思?您没有理由不能这样做在本地计算机上测试此代码。未定义错误要求。未定义no undef和exports。no undef是我在本地运行代码时遇到的错误。这就是为什么我假设这两个函数都是基于服务器的。这在本地起作用?如果可能,请添加完整的错误跟踪,您可以在CloudWatch日志或lambda execution logIt中找到ot在本地工作。Require和Exports是基于服务器的。@user14579431什么意思Require和Exports是基于服务器的?没有理由不能在本地计算机上测试此代码。没有定义错误Require。没有定义任何undef和Exports。没有undef是我在本地运行代码时遇到的错误。这就是为什么我假设两者都是错误nctions是基于服务器的。修复了键入错误,谢谢。现在我收到一条新的错误消息SyntaxError:missing after argument list。修复了键入错误,谢谢。现在我收到一条新的错误消息SyntaxError:missing after argument list。您的建议无法在AWS中运行,错误消息为:SyntaxError:missing after argument list错误消息。您的建议无法执行在AWS中运行时,出现错误消息:SyntaxError:missing after argument list错误消息。