node.js - 在 Node.js 中通过 AWS Lambda 发送 POST 请求
问题描述
当从我的 Alexa Skill 调用 Intent 时,我想向 Twilio 发送 POST 请求。测试代码时,没有错误,但请求似乎没有通过。在 Postman 中测试 POST 请求有效。
function postToTwilio() {
var http = require("https");
var postData = JSON.stringify({
'To' : '1234567',
'From': '1234546',
'Url': 'https://handler.twilio.com/twiml/blablabla',
});
var options = {
"method": "POST",
"hostname": "https://api.twilio.com",
"path": "/12344/Accounts/blablablablba/Calls.json",
"headers": {
"Authorization": "Basic blblablablablabla",
"Content-Type": "application/x-www-form-urlencoded",
}
};
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(postData);
req.end();
}
解决方案
首先,请求是异步调用,因此您需要让 Alexa 等待响应。
为此,您需要使用异步等待过程并使用承诺。
var postData = JSON.stringify({
'To' : '1234567',
'From': '1234546',
'Url': 'https://handler.twilio.com/twiml/blablabla',
});
var options = {
"method": "POST",
"hostname": "https://api.twilio.com",
"path": "/12344/Accounts/blablablablba/Calls.json",
"headers": {
"Authorization": "Basic blblablablablabla",
"Content-Type": "application/x-www-form-urlencoded",
}
};
function get(options) {
return new Promise(((resolve, reject) => {
const request = https.request(options, (response) => {
response.setEncoding('utf8');
let returnData = '';
if (response.statusCode < 200 || response.statusCode >= 300) {
return reject(new Error(`${response.statusCode}: ${response.req.getHeader('host')} ${response.req.path}`));
}
response.on('data', (chunk) => {
returnData += chunk;
});
response.on('end', () => {
resolve(JSON.parse(returnData));
});
response.on('error', (error) => {
reject(error);
});
});
request.write(postData)
request.end();
}));
}
然后,当您调用此 get 函数时:
let response = await get(options)
我没有整体测试过,但那是基本骨架。
让我知道这是否有效。
推荐阅读
- java - 使用 DynamoDBSaveExpression 检查其他键是否存在
- sql-server-2012 - 有条件怎么选?
- python-3.x - Python 在使用 @app.route 时抛出“语法错误”
- javascript - Angular4——让多个不相关的组件互相通知更新数据的问题,有没有更干净的编码方式?
- java - Spring boot + hikari - dataSource 或 dataSourceClassName 或 jdbcUrl 是必需的问题
- r - R 脚本 - PDF 错误:十六进制字符串中的非法字符;当我搜索关键字时
- laravel - 多身份验证,而一名警卫应该是多租户加社交名流
- r - R - 变量之间的错误 T 测试 For 循环命令
- java - 如何使用 Java 和 XML 配置在 Spring Security 中配置 jdbc 身份验证管理器?
- html - 行不在行中