次のJavascriptオブジェクトをあるローカルのnodejs(express)インスタンスから別のインスタンスに送信しようとしています。投稿リクエスト中にJSON文字列が変更されました
var v = {
items: [{
id: "fil1",
values: [
{ key: "123", timestamp: 333, value: "aaa" },
{ key: "123", timestamp: 333, value: "aaa" },
{ key: "123", timestamp: 333, value: "aaa" },
{ key: "123", timestamp: 333, value: "aaa" }
]
}]
};
Iは、次のPOSTリクエストrequest = require('request')
を使用し、params
は、上記目的v
のJSON.stringifiedバージョンです。
var performPostRequest = function (ip, port, endpoint, params, callback) {
var url = "http://" + ip + ":" + port + "/" + endpoint;
request.post({
url: url,
form: params,
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
}
}, function (err, response, body) {
if (err) {
callback(err, body);
}
if (body) {
callback(err, JSON.parse(body));
}
});
};
受信エンドポイントは、次のようになります。ルータがexpress.Router(ある
router.post('/values', function (req, res) {
console.log(req.body);
res.status(201).send("");
});
)。
JSON.stringify(v)
を送信者に印刷すると、結果はオブジェクトvと一致する文字列になりますが、受信側のエンドポイントで要求の本文を印刷すると、文字列が台無しになります(下記参照) 。私は間違って何をしていますか?送信者の
JSON.stringify(v)
:受信機で
{"items":[{"id":"fil1","values":[{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"}]}]}
req.body
:
{ '{"items":': { '{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"},{"key":"123","timestamp":333,"value":"aaa"}': '' } }
'params'は文字列ですか? [request docs](https://www.npmjs.com/package/request#requestoptions-callback)は、 'form'オプションの値がJSON文字列ではなく、オブジェクトまたはクエリ文字列でなければならないことを示しています。 'body'を使うことを意味しましたか? –