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 说,hostname
和 path
应该只是字符串而不是数组,就像您的代码中的情况一样。
所以我首先要做的是将您的代码更改为:
var options = {
"method": "POST",
"hostname": "beta.todoist.com",
"path": "/API/v8/tasks",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + token
}
我正在尝试通过 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 说,hostname
和 path
应该只是字符串而不是数组,就像您的代码中的情况一样。
所以我首先要做的是将您的代码更改为:
var options = {
"method": "POST",
"hostname": "beta.todoist.com",
"path": "/API/v8/tasks",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + token
}