🪛

Node jsで簡単にServerを作ってみる②(jsonデータをGET、POSTする)

2024/06/08に公開

Node.jsでJSONデータをGETおよびPOSTリクエストでやり取りすることができます。
基本的なHTTPサーバーを構築してJSONデータをGETおよびPOSTリクエストをしてみます!

GET

一旦GETでデータを持ってくるようにします
URLをどこから持ってくるか設定後methodでなんのアクションをするか設定します!

const server = http.createServer((req, res) => {
  const url = req.url; // どこに
  const method = req.method; // アクション
  if (url === "/fruit") {
    if (method === "GET") {

    }
  }

メモリの保管しているデータを送ります

// 保管しているデータ
const fruits = [
  { name: "apple" },
  { name: "banana" },
  { name: "orange" },
  { name: "pineapple" },
];

writeHeadstatus codeheaderの情報を送ることもできます
データを読むことなのでstatus codeは200にして保管しているデータをJSON形で変換して送ります

if (url === "/fruit") {
    if (method === "GET") {
      res.writeHead(200, { "Content-Type": "application/json" });
      res.end(JSON.stringify(fruits));
    }

JSONデータを確認できました!

全体コード⇩

// 保管しているデータ
const fruits = [
  { name: "apple" },
  { name: "banana" },
  { name: "orange" },
  { name: "painapple" },
];

const server = http.createServer((req, res) => {
  const url = req.url; // どこに
  const method = req.method; // アクション
  if (url === "/fruit") {
    if (method === "GET") {
      res.writeHead(200, { "Content-Type": "application/json" });
      res.end(JSON.stringify(fruits));
    }
  }
});

server.listen(8080);

POST

今回はデータを持ってきて新しいデータを追加します!
BufferでPOSTしてみます
body objectを作った後res.onイベントでデータを持ってきた後の処理をします!

 } else if (method === "POST") {
      const body = [];
      req.on("data", (chunk) => {
        console.log(chunk);
        body.push(chunk);
      });
}

req.onのendイベントで、JSON.parse()を使用して受け取ったJSONデータをBuffer.concat(body)で結合し、その後toString()で変換してJSONとして返します。
その後、新しく受け取った配列をpushします。

req.on("end", () => {
    const bodyStr = Buffer.concat(body).toString();
    const fruit = JSON.parse(bodyStr);
    fruits.push(fruit);
    console.log(fruit);
    // 新しく作ったから201で返す
    res.writeHead(201);
    res.end();
});

ブラウザではPOSTは確認ができないのでpostmanを使って確認します
※postmanでlocalhostの確認ができないのでデスクトップアプリをDLして確認します!

POSTなのでbodyにJSONデータを入れて送信してみたら
http://localhost:8080/fruitで201コードが返却されるのが見られます!

consloeとURLでもデータが入っていることが確認できます!

全体コード⇩

 } else if (method === "POST") {
      const body = [];
      req.on("data", (chunk) => {
        console.log(chunk);
        body.push(chunk);
      });

      req.on("end", () => {
        const bodyStr = Buffer.concat(body).toString();
        const fruit = JSON.parse(bodyStr);
        fruits.push(fruit);
        console.log(fruit);
        // 新しく作ったから201で返す
        res.writeHead(201);
        res.end();
      });
    }

結論

ここまで簡単にサーバーを作成する方法を調べました!
Expressのようなフレームワークを利用すれば、さらに簡便で効率的にサーバーを構築することができます。次回はExpressを使って、ローカルではなく本当のサーバーを構築して登録してみます!

Discussion