使用请求HTTP客户端库发布到FastSpring API

时间:2017-04-07 21:17:02

标签: javascript api request

我正在尝试使用request POST到FastSpring的API来更新我的客户的订阅。我能够毫无问题地获得订阅,但是当谈到POST时,我似乎无法让它工作。

这是我的代码:

      var options = {
          method: 'POST',
          url: 'https://api.fastspring.com/subscriptions',
          headers: {
              'Authorization': auth,
              'User-Agent': 'request',
              'Content-Type': 'application/json'
          },
          formData : {
              'subscriptions': [
                  {
                      "subscription": subscriptionId,
                      "quantity": newQty,
                      "product": product,
                      "prorate": true
                  }
              ]
          }
          
      };
         
      request.post(options, function (error, response, body) {
          _logger.error('Fastspring API response: ' + JSON.stringify(response));
          _logger.error('Fastspring API error: ' + JSON.stringify(error));
          _logger.error('Fastspring API body: ' + JSON.stringify(body));
          if (!error && response.statusCode === 200) {
              res.status(200).send(JSON.parse(body));
          } else {
              _logger.error('Fastspring API Error: ' + error);
              res.status(500).send({ 'error':  error});
          }
      });

尝试POST的结果会导致以下错误:

TypeError: source.on is not a function

我查了一下,看到它失败的原因是请求无法接受我发送的formData。问题是没有它,我无法POST到FastSpring的API(如果我发送任何其他内容,我会收到错误消息“订阅未找到。”。

我的问题是:我可以以请求接受的任何方式发送我的formData吗?我已经在请求的问题页面上查看了这个问题,但找不到满意的答案。

1 个答案:

答案 0 :(得分:1)

您是否尝试传递一些JSON数据?通常这种数据是用body而不是formData写的。

尝试这样的事情:

var myreq = request.post(...)
myreq.write(myJsonData);
myreq.end();