Node.js +向第三方服务发送API请求

时间:2016-09-15 21:39:14

标签: javascript node.js

我有一个Node控制台应用。在我的应用程序中,我正在尝试将一些数据发送到第三方Web服务。我可以通过POSTMAN通过第三方Web服务成功添加数据。在我的邮递员中,我有一个这样的请求设置:

接头

api-key
{my key}

Content-Type
application/json

车身

{
  "value": [
    { 
      "@operation": "send",
      "id":"1",
      "name":"Hello",
      "position": { "type": "Point", "coordinates": [90.000000, 0.000000] },
      "tags":["january", "friends"]
    }
  ]
}

我现在正尝试通过Node复制发送此数据。为了做到这一点,我写了以下内容:

var ops = {
  host: 'example.com',
  path: '/api/upload?version=2',
  method: 'POST',
  headers: {
    'api-key':'[my key]',
    'Content-Type': 'application/json'
  }
};

var r = https.request(ops, (res) => {
  res.on('data', (d) => { 
    console.log(res.statusCode); 
    console.log(res.statusMessage);
  });
});

var data = {
  "value": [
    req.body.record    // req is passed in via express 
  ]
};
console.log(data);

r.write(JSON.stringify(data));
r.end();

执行第console.log(data);行时,我在控制台窗口中看到以下内容:

{ value:
   [ { '@operation': 'send',
       id: '1',
       name: 'Hello',
       position: [Object],
       tags:[Object]
    } ] }

我不确定这是打印问题还是实际问题。无论哪种方式,我真正的问题是,当我发送请求时,我看到以下内容也打印在控制台窗口中:

400
Bad Request

该数据看起来是正确的。我不明白为什么当我尝试从Node发送时我得到400。然而,它在Postman中运作得很好。它与引号有关吗?我以为JSON.stringify处理了这个。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

老实说,除非你有充分的理由不这样做,否则只需使用像request这样的东西。它比你自己构建它更容易/更清洁。

我无法更明确地回答,而不知道您正在与之交谈的API是什么。

另外,在res.on('data')中,只需console.log(req);,看看还有什么隐藏在那里;它可以帮助您使用现有代码解决这个问题。

答案 1 :(得分:0)

我会尝试

console.log(JSON.stringify(data));

而不是

console.log(data);

然后决定出了什么问题。这将为我提供发送到服务器的完整数据。

<强>更新 我做了快速实验并收到了以下输出:

{"value":[{"@operation":"send","id":"1","name":"Hello","position":{"type":"Point","coordinates":[90,0]},"tags":["january","friends"]}]}

与原始JSON的区别在于如何将坐标发送到网络服务(作为整数),这可能是您的问题。