我有一个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处理了这个。
我做错了什么?
答案 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的区别在于如何将坐标发送到网络服务(作为整数),这可能是您的问题。