Запрос HTTP Post не выполняется в AWS Lambda - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь добавить предмет в свой проект Todoist с помощью навыка Alexa в AWS Lambda.Я очень новичок во всех этих технологиях, так что прости меня, если исправление невероятно очевидно.Когда я прошу Алексу вызвать мой навык 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, и был добавлен почтовый индекс.

Пожалуйста, помогите мне понять, почему он не работает.

1 Ответ

0 голосов
/ 15 мая 2018

Трудно сказать, что является причиной этой ошибки.Но документы узла говорят, что hostname, а также path должны быть просто строками, а не массивами, как это имеет место в вашем коде.

Так что я?Сначала я должен изменить код:

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