javascript - 如何使用 Promise 将正文添加到 JavaScript 中的 POST 请求?
问题描述
我有以下功能适用于 GET 请求:
function httpGet(options) {
return new Promise(((resolve, reject) => {
const request = https.request(options, (response) => {
response.setEncoding('utf8');
let returnData = '';
response.on('data', (chunk) => {
returnData += chunk;
});
response.on('end', () => {
resolve(JSON.parse(returnData));
});
response.on('error', (error) => {
reject(error);
});
});
request.end();
}));
}
使用以下选项可以正常工作:
let path = `/1/indexes/combined-faq-directions?query=${location}&typoTolerance=false&getRankingInfo=true&optionalWords=${location}`;
var options = {
host: 'YQRKWVXBWV-1.algolianet.com',
port: 443,
path: path,
method: 'GET',
headers: {
"X-Algolia-API-Key": "APIKEYXXXX",
"X-Algolia-Application-ID": "IDXXX"
}
};
但我现在正在尝试使用相同的格式对不同的 URL 进行 POST。通过邮递员,我可以看到这工作正常,但我似乎无法将其转换为我的承诺的正确格式。
var https = require('follow-redirects').https;
var fs = require('fs');
var options = {
'method': 'POST',
'hostname': 'api.airtable.com',
'path': '/v0/appasoP3zaNL9k8Pj/Analytics',
'headers': {
'Authorization': 'Bearer keyxxxx',
'Content-Type': 'application/json',
'Cookie': 'brw=brw9wuY1b9RmtTl1q'
},
'maxRedirects': 20
};
var req = https.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
var postData = JSON.stringify({"records":[{"fields":{"RoomNo":"Room 6"}}]});
req.write(postData);
req.end();
我已尝试对此进行调整,但出现错误 ERR_STREAM_WHITE_AFTER_END
let path = `v0/appasoP3zaNL9k8Pj/Analytics`;
var options = {
host: "api.airtable.com",
port: 443,
path: path,
method: "POST",
headers: {
Authorization: "Bearer keyxxx",
"Content-Type": "application/json",
},
};
var postData = JSON.stringify({ records: [{ fields: { RoomNo: "Room 6" } }] });
async function asyncCall() {
const response = await httpGet(options, postData);
console.log(response);
}
asyncCall();
function httpGet(options, postData) {
return new Promise((resolve, reject) => {
const request = https.request(options, (response) => {
response.setEncoding("utf8");
let returnData = "";
response.on("data", (chunk) => {
returnData += chunk;
});
response.on("end", () => {
resolve(JSON.parse(returnData));
});
response.on("error", (error) => {
reject(error);
});
if (postData) {
request.write(postData);
}
});
request.end();
});
}
我想我非常接近,但只是无法弄清楚语法。非常感谢任何帮助!
解决方案
推荐阅读
- nginx - Nginx 冲突的服务器名称竞争条件
- deployment - 将代码部署到负载均衡器下的多台生产服务器,无需持续部署
- flutter - 在选择任何弹出项目之前,Flutter popupmenubutton 不会关闭
- python-3.x - 已安装 dbt 但出现错误“未找到 DBT 命令错误”
- r - 将相似的字符串分组并将它们的值更改为共同的值,同时保留各个行
- swift - UIStackView 仅在 iPhone SE Simulator 上进行裁剪和截断
- android - TikTok SDK登录如何获取用户信息?
- express - 在对模型进行更改后,我们是否应该使用 Sequelize 手动修改迁移文件?
- git - 有没有办法找出哪个用户在 Git 中重命名了一个分支?
- regex - IIS URL 重写:在 url 中只添加一次斜杠