設定するいくつかのフォームパラメータを使用してpostHTTPリクエストを作成しようとしています。ノードサーバーでaxiosを使用しています。以下に示すように、URLを構築するJavaコードの実装が既にあります。
Javaコード:
HttpPost post = new HttpPost(UriBuilder.fromUri (getProperty("authServerUrl"))
.path(TOKEN_ACCESS_PATH).build(getProperty("realm")));
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new NameValuePair("username",getProperty ("username")));
formParams.add(new NameValuePair("password",getProperty ("password")));
formParams.add(new NameValuePair("client_id, "user-client"));
私はaxiosで同じことをしようとしています。
AXIOSの実装:
axios.post(authServerUrl +token_access_path,
{
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}).then(function(response) {
console.log(response); //no output rendered
}
ポストリクエストでこれらのフォームパラメーターを設定するアプローチは正しいですか?
次のことを行う必要があります。
var querystring = require('querystring');
//...
axios.post(authServerUrl + token_access_path,
querystring.stringify({
username: 'abcd', //gave the values directly for testing
password: '1235!',
client_id: 'user-client'
}), {
headers: {
"Content-Type": "application/x-www-form-urlencoded"
}
}).then(function(response) {
console.log(response);
});
純粋なバニラJavaScriptを使って簡単なことをするために、別のライブラリまたはモジュールを取り込むのはなぜですか? POSTリクエストで送信する目的のデータを生成するのは、実際にはJSの1行です。
// es6 example
const params = {
format: 'json',
option: 'value'
};
const data = Object.entries(params)
.map(([key, val]) => `${key}=${encodeURIComponent(val)}`)
.join('&');
console.log(data);
// => format=json&option=value
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data,
url: 'https://whatever.com/api',
};
const response = await axios(options); // wrap in async function
console.log(response);