如何使用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",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();
  });
}

我认为我非常接近,但无法弄清楚语法。任何帮助,不胜感激!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)