javascript-fetch-post

fetch-post

Fetch API

昨日 jsonserver で立てたものもをそのまま使用します。

パラメータ無しで POST

curl -X POST http://localhost:3000/posts/
[
  {
    "id": 1,
    "title": "json-server",
    "author": "typicode"
  },
  {
    "id": 2,
    "title": "json-server2",
    "author": "typicode2"
  }
]

パラメータ付き

curl -X POST -d "id=2" http://localhost:3000/posts/
{
  "id": 2,
  "title": "json-server2",
  "author": "typicode2"
}

Fetch を使って取得する場合はこんな感じ。
別で id を入れるテキストボックスと、送信ボタンがある html ファイルを作っています。

const post = (url, param) => {
  return fetch(url, {
    method: "POST",
    body: JSON.stringify(param),
    headers: {
      "Content-Type": "application/json",
    },
  })
    .then((res) => {
      if (!res.ok) throw Error();
      return res.json();
    })
    .catch((error) => "エラーが発生しました");
};

const getPosts = async () => {
  const url = "http://localhost:3000/posts/";
  const id = document.querySelector("#id").value;
  const param = { id };
  console.log(await post(url, param));
};

const postSubmit = document.querySelector("#post");
postSubmit.addEventListener("click", getPosts);

実行結果はこんな感じ。

//id1で送信
{id: 1, title: 'json-server', author: 'typicode'}
//id2で送信
{id: 2, title: 'json-server2', author: 'typicode2'}
//パラメータ無しで送信
(2) [{}, {}]
0: {id: 1, title: 'json-server', author: 'typicode'}
1: {id: 2, title: 'json-server2', author: 'typicode2'}
//id3で送信※404
エラーが発生しました

post

fetch の第 2 引数には色々設定を付与することができます。
第 2 引数がない場合は GET で投げられるので、POST の場合は第 2 引数で色々設定していきます。
もちろん、GET でも認証情報を送る場合等、必要な場合は第二引数を設定します。

method

method: "POST"の部分。見たままですが、メソッドを POST で指定しています。

body

body: JSON.stringify(param)の部分。ここも見たままですが、POST で送るパラメータを設定します。

headers: {}

ヘッダー情報を付与することもできます。今回は application/json だけ。
他にも、ベーシック認証が必要な場合等もここに書いていくことになります。

その他

他の部分は GET の時とほとんど変わりません。エラーがあったらエラーテキストを投げ、正常な場合は res.json()で結果を返しています。

色々なパラメータ

その他にも色々設定することができます。 ブラウザの認証情報を一緒に投げる credentials や、cache の設定等、必要なものを追加していきましょう。