Javascript Node.js+;向第三方服务发送API请求
我有一个节点控制台应用程序。在我的应用程序中,我试图向第三方web服务发送一些数据。我可以通过POSTMAN通过第三方web服务成功添加数据。在我的邮递员中,我有如下请求设置: 标题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":
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中的头都是相同的,所以区别就在正文的某个地方。