Nodeのhttpモジュールでウェブサーバーを作り、リクエストに応答し、JSONを返しましょう。
このレッスンを Kodokon で開くウェブサーバーとは、絶えず動き続けてリクエストを待つプログラムです。リクエストとは、クライアント(ブラウザ、モバイルアプリなど)から送られる要求のことです。リクエストごとに、サーバーはレスポンスを返します。このやり取りはHTTPプロトコル、つまりウェブの共通言語に従います。Nodeにはすぐ使えるhttpモジュールが含まれています。インストールするものは何もありません。最後の概念です。ポート、つまりマシン上の特定のプログラムを識別する番号で、建物の部屋番号のようなものです。私たちはポート3000を使います。localhostはというと、これは単にあなた自身のマシンを指します。
import http from "node:http";
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello from my server!");
});
server.listen(3000, () => {
console.log("Server at http://localhost:3000");
});分解してみましょう。http.createServerは、リクエストごとに呼ばれる関数を受け取ります。二つのパラメーターがあります。req(届いたリクエスト)とres(組み立て中のレスポンス)です。res.statusCode = 200はステータスコードを設定します。200は"すべて問題なし"を意味します。res.setHeaderはヘッダー、つまりレスポンスについてのメタデータを一つ追加します。ここではその形式、プレーンテキストです。res.endはレスポンスを送って閉じます。最後に、server.listen(3000)はサーバーをポート3000で待ち受けさせます。ブラウザでhttp://localhost:3000を開きましょう。あなたのテキストが表示されます。プログラムが制御を返さないことに注目してください。リクエストを待っているのです。Ctrl+Cで止めましょう。
モダンなサーバーがプレーンテキストを返すことはめったにありません。JSONで応答するAPIを公開します。JSONはあなたがすでに知っている、あらゆる言語が理解するあのテキスト形式です。二つの調整をします。Content-Typeヘッダーがapplication/jsonになり、JavaScriptオブジェクトはJSON.stringifyでテキストに変換されます。この機会に、クライアントが要求したパスであるreq.urlに応じて違う反応をしてみましょう。これがルーティングの基本です。
import http from "node:http";
const server = http.createServer((req, res) => {
res.setHeader("Content-Type", "application/json");
if (req.url === "/api/message") {
const body = { message: "Hello!", ok: true };
res.statusCode = 200;
res.end(JSON.stringify(body));
return;
}
res.statusCode = 404;
res.end(JSON.stringify({ error: "Not found" }));
});
server.listen(3000, () => {
console.log("http://localhost:3000/api/message");
});404ステータスコードは"見つからない"を意味します。要求されたパスがどの既知のルートにも一致しません。最初のレスポンスのあとのreturnに注目してください。これは、コードが続いて二つ目のレスポンスを送るのを止めます。二つ目を送るとエラーになるからです。テストするには、ブラウザでアドレスを開くか、curlを使いましょう。HTTPリクエストを送ってレスポンスをターミナルに表示するコマンドラインツールです。
curl http://localhost:3000/api/message