HTTP Post 请求未在 AWS Lambda 中通过

HTTP Post request not going through in AWS Lambda

我正在尝试通过 AWS Lambda 中的 Alexa 技能向我的 Todoist 项目添加一个项目。我对所有这些技术都很陌生,所以如果修复非常明显,请原谅我。当我要求 Alexa 调用我的 addZipcode 技能时,它失败了。这就是我所拥有的(不包括所有 Alexa Lambda 函数中的一些内容):

Alexa stuff
...
const handlers = {
'LaunchRequest': function() {
    this.emit('AMAZON.HelpIntent');
},
'addZipcode': function() {

    const newZip = this.event.request.intent.slots.zipcode.value;
    const speechOutput = newZip;

    var http = require("https");
    function postZip(newZip) {
        var options = {
            "method": "POST",
            "hostname": [
                "beta",
                "todoist",
                "com"
            ],
            "path": [
                "API",
                "v8",
                "tasks"
            ],
            "headers": {
                "Content-Type": "application/json",
                "Authorization": "Bearer " + token
            }
        };

        var req = http.request(options, function(res) {
            var chunks = [];
            res.on("data", function(chunk) {
                chunks.push(chunk);
            });

            res.on("end", function() {
                var body = Buffer.concat(chunks);
                console.log(body.toString());
            });
        });
        req.write(JSON.stringify({ content: newZip, project_id: XXXXXXXXXX }));
        req.end();
    }

    postZip(newZip);

    this.response.cardRenderer(SKILL_NAME, newZip);
    this.response.speak(speechOutput);
    this.emit(':responseReady');

},
.... cont

当我尝试 运行 使用 Alexa 的技能时出现错误:

Response:
{
  "errorMessage": "hostHeader.replace is not a function",
  "errorType": "TypeError",
  "stackTrace": [
    "Agent.addRequest (_http_agent.js:130:39)",
    "new ClientRequest (_http_client.js:159:16)",
    "Object.exports.request (http.js:31:10)",
    "Object.exports.request (https.js:199:15)",
    "postZip (/var/task/index.js:72:28)",
    "Object.addZipcode (/var/task/index.js:88:9)",
    "emitNone (events.js:86:13)",
    "AlexaRequestEmitter.emit (events.js:185:7)",
    "AlexaRequestEmitter.EmitEvent (/var/task/node_modules/alexa-sdk/lib/alexa.js:216:10)",
    "AlexaRequestEmitter.ValidateRequest (/var/task/node_modules/alexa-sdk/lib/alexa.js:181:23)"
  ]
}

我尝试搜索有关 hostHeader.replace 或什至只是 hostHeader 的更多信息,但无济于事。当我用

包围我的 postZip 函数时
exports.handler = function(event, context, callback) {} 

技能确实有效,但是 Post 请求没有通过(例如,新的邮政编码没有作为新任务添加到我的 Todoist 上)。我很确定 Post 请求代码本身是正确的,因为我 运行 通过 Postman 并添加了邮政编码。

请帮我理解为什么它不起作用。

很难说是什么原因导致了这个错误。但是 node docs 说,hostnamepath 应该只是字符串而不是数组,就像您的代码中的情况一样。

所以我首先要做的是将您的代码更改为:

var options = {
        "method": "POST",
        "hostname": "beta.todoist.com",
        "path": "/API/v8/tasks",
        "headers": {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + token
        }