我的代码试图从我的本地Node.js服务器将数据发布到Coldfusion API。我已设法与API通信并通过请求标头对自己进行身份验证。但是我实际上很难通过我的JSON对象,因为我无法使结构正确。
API不接受请求模块的JSON选项,因此这是我最简单的选项。
API期待以下内容:
{
'source': {
'customer': {
'customerlogin': 'myusername',
'customerpassword': 'mypassword',
}
}
}
如果我将以下body参数(从其他人的成功帖子)硬编码到我的帖子中,我的代码就可以工作了。
var Jrequest = require('request');
var options = {
uri: 'http://myAPI/customerSSO.json',
headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': something', 'Timestamp': timestamp},
method: 'POST',
body: 'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' // Working
};
Jrequest(options, function (error, response, body){
res.send(body);
});
如果我以其他方式发送JSON,例如json.stringify(),则会因“源是必需的但未定义”而被拒绝。
所以我想我的问题是,在node.js中我如何将JSON变成看起来像这样的东西
'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D'
还是我忽略了另一种选择?
如果我使用了错误的术语,感谢您的帮助和道歉。
答案 0 :(得分:4)
我认为这应该有效:
var querystring = require('querystring');
...
request({
...
headers : { 'Content-Type': 'application/x-www-form-urlencoded', ... },
body : 'source=' + querystring.escape(JSON.stringify({
'customer': {
'customerlogin': 'myusername',
'customerpassword': 'mypassword',
}
})),
...
}, ...)
您的示例还包含换行符和回车符等,但我假设这些是可选的。