web-dev-qa-db-ja.com

Axios Httpクライアント-フォームパラメーターを使用してHttp Post URLを構築する方法

設定するいくつかのフォームパラメータを使用して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
        }

ポストリクエストでこれらのフォームパラメーターを設定するアプローチは正しいですか?

41
mmraj

次のことを行う必要があります。

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);
    });
75
cperez

純粋なバニラ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);
3
jhickok