Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js+;向第三方服务发送API请求_Javascript_Node.js - Fatal编程技术网

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

Javascript Node.js+;向第三方服务发送API请求,javascript,node.js,Javascript,Node.js,我有一个节点控制台应用程序。在我的应用程序中,我试图向第三方web服务发送一些数据。我可以通过POSTMAN通过第三方web服务成功添加数据。在我的邮递员中,我有如下请求设置: 标题 api-key {my key} Content-Type application/json 身体 { "value": [ { "@operation": "send", "id":"1", "name":"Hello", "position":

我有一个节点控制台应用程序。在我的应用程序中,我试图向第三方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"]
    }
  ]
}
我现在尝试通过节点复制发送此数据。为了做到这一点,我写了以下内容:

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(数据)时执行后,我在控制台窗口中看到以下内容:

{ value:
   [ { '@operation': 'send',
       id: '1',
       name: 'Hello',
       position: [Object],
       tags:[Object]
    } ] }
400
Bad Request
我不确定这是打印问题还是实际问题。不管怎样,我真正的问题是,当我发送请求时,控制台窗口中也会显示以下内容:

{ value:
   [ { '@operation': 'send',
       id: '1',
       name: 'Hello',
       position: [Object],
       tags:[Object]
    } ] }
400
Bad Request
这些数据看起来是正确的。我不明白为什么当我尝试从节点发送时会得到400。然而,从邮递员的角度来看,它工作得很好。这和引号有关吗?我以为JSON.stringify处理了这个问题


我做错了什么?

老实说,除非你有很好的理由不这么做,否则就用类似的方法。这比自己动手建造要容易/干净得多

如果不知道您正在谈论的API所期望的是什么,我无法更具体地回答


另外,在
res.on('data')
中,只需
console.log(req)并查看隐藏在其中的其他内容;它可能会帮助您使用现有代码解决这个问题。

老实说,除非您有很好的理由不这样做,否则只需使用类似的代码即可。这比自己动手建造要容易/干净得多

如果不知道您正在谈论的API所期望的是什么,我无法更具体地回答

另外,在
res.on('data')
中,只需
console.log(req)并查看隐藏在其中的其他内容;它可能会帮助您用现有代码解决这个问题。

我会试试

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的区别在于如何将坐标发送到web服务(作为整数),这可能是您的问题。

我会尝试

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的区别在于坐标如何发送到web服务(作为整数),这可能是您的问题。

如果我错了,请纠正我,但因为它是400,这不意味着我这边的错误。在这种情况下,API是不可逆的,对吗?或者我误解了400。不,你从API收到了400,因为你发布的数据(可能)不是API所期望的。在回复(可能是
response.body
)中,您会发现更多的细节,因此您应该看到其中的内容-这可能有助于您解决此问题。如果我错了,请纠正我,但是,因为它是400,这不意味着我这边的错误。在这种情况下,API是不可逆的,对吗?或者我误解了400。不,你从API收到了400,因为你发布的数据(可能)不是API所期望的。在回复(可能是
response.body
)中,你会发现更多细节,因此你应该看看有什么-它可能会帮助你解决这个问题。这根本不会为调查添加任何信息。它会的。日志(数据)转储对象。所以像位置和标签这样的元素被打印为“[Object]”。你不知道你在这个对象中拥有什么,也不知道这个对象将如何被字符串化。如果使用console.log(JSON.stringify(data)),则会记录发布到服务的真实字符串。因此,它可以与《邮递员》中的作品相比较。请注意,HTTP错误400表示“错误请求”。在大多数情况下,请求数据不正确(格式不正确)。看起来POSTMAN和node中的头都是相同的,所以差异在正文的某个地方。这根本不会为调查添加任何信息。它会的。日志(数据)转储对象。所以像位置和标签这样的元素被打印为“[Object]”。你不知道你在这个对象中拥有什么,也不知道这个对象将如何被字符串化。如果使用console.log(JSON.stringify(data)),则会记录发布到服务的真实字符串。因此,它可以与《邮递员》中的作品相比较。请注意,HTTP错误400表示“错误请求”。在大多数情况下,请求数据不正确(格式不正确)。看起来POSTMAN和node中的头都是相同的,所以区别就在正文的某个地方。