Fetch API
ブラウザで動くJavaScriptからHTTPリクエストを発行する
これまで、ブラウザがサーバーに対してリクエストを送信するのは、リンクがクリックされた ときや、フォームが送信されたときなど、ページの再読み込みが起こる場合のみでした。
しかしながら、ブラウザ上で動くJavaScriptから利用できる**Fetch API**を用いると、任意のタイミングでリクエストが発行できるようになります。APIは、アプリケーションプログラミングインターフェース(Application Programming Interface)の略で、あるソフトウェアの機能や管理するデータを、外部の他のソフトウェアで利用するための手順やデータ形式を定めた規約のことです。多くのソフトウェアが共通して利用する機能がまとめて提供されており、APIに従い短いコードを記述するだけでその機能を利用することができます。
サーバーとクライアント、どちらで動くJavaScriptなのかに注意しながら、次のプログラムを実行してみましょう。
static/index.htmlのbody内
<button id="fetch-button">天気予報を見る</button>
static/script.js (ブラウザ上で動くJavaScript)
document.getElementById("fetch-button").onclick = async () => {
const response = await fetch("/weather");
const weather = await response.text();
alert(weather);
};
async () => {}
は、非同期関数、つまりasync
キーワードのついた関数を生成するためのアロー関数式です。
fetch
関数は、リクエストを発行するための関数です。標準ではGETリクエストが発行されます。この関数の戻り値にawait 演算子
を適用すると、発行したリクエストに対するResponse
クラスのインスタンスが得られます。fetch
関数を利用することで、ページの再読み込みを伴わず、関数が実行されるタイミングでリクエストを発行することができます。
Response#text
メソッドは、レスポンスボディ全体を文字列として読み込むための非同期関数です。
なお、サーバーでは次のプログラムが動作しているものとします。
main.mjs (サーバーとして動くJavaScript)
import express from "express";
const app = express();
app.use(express.static("static"));
app.get("/weather", (request, response) => {
response.send("晴れ");
});
app.listen(3000);