AngularからNode.jsへPOST送信する方法|Webアプリ開発実践ノート Day07 | SORAXIOMラボ

Day07:フォーム入力をAPIに送る(POST処理)

スポンサーリンク
Webアプリ開発実践ノート

はじめに

Day06では、AngularからNode.jsのAPIを呼び出して
データを「取得」した。

今回は逆。

Angularからデータを「送る」

ここで初めて、

  • 入力
  • バリデーション
  • 保存処理

という、業務アプリの核心に入る。


今回のゴール

  • Angularでフォーム入力を扱う
  • POSTでAPIに送る
  • Node.jsで受け取る
  • JSONで結果を返す

① Node.js側:POST APIを追加

まずはバックエンドから。

Service側(処理)

// src/services/userService.ts

export type CreateUserRequest = {
  name: string;
};

export type CreateUserResponse = {
  message: string;
};

export function createUser(data: CreateUserRequest): CreateUserResponse {
  return {
    message: `User ${data.name} created`
  };
}

ここではまだDBは使わない。
まずは流れを理解することが目的。


Controller側

// src/controllers/userController.ts

import { Request, Response } from "express";
import { createUser } from "../services/userService";

export function createUserController(req: Request, res: Response) {
  const { name } = req.body;

  const result = createUser({ name });

  res.json(result);
}

index.tsに追加

import express from "express";
import { createUserController } from "./controllers/userController";

const app = express();
app.use(express.json());

app.post("/users", createUserController);

ここで重要なのは:

app.use(express.json());

これがないとPOSTのbodyが読めない。


② Angular側:フォームを作る

ServiceにPOST追加

// user.service.ts

export interface CreateUserRequest {
  name: string;
}

export interface CreateUserResponse {
  message: string;
}

createUser(data: CreateUserRequest) {
  return this.http.post<CreateUserResponse>(
    'http://localhost:3000/users',
    data
  );
}

Component側

name: string = '';
resultMessage: string = '';

submit() {
  this.userService.createUser({ name: this.name })
    .subscribe(res => {
      this.resultMessage = res.message;
    });
}

HTML

<input [(ngModel)]="name" placeholder="名前を入力">

<button (click)="submit()">送信</button>

<p>{{ resultMessage }}</p>

FormsModuleapp.module.ts に追加するのを忘れずに。

import { FormsModule } from '@angular/forms';

imports: [
  ...,
  FormsModule
]

ここで起きていること

流れはこう。

入力
  ↓
Angular
  ↓
POST /users
  ↓
Node.js
  ↓
Service処理
  ↓
JSON返却
  ↓
画面更新

これがWeb業務アプリの基本構造。


GETとPOSTの違い

GETPOST
用途取得作成
データURLbody
書き込み×

ここを混ぜると設計が崩れる。


役割分離は崩れていないか?

  • Angular:入力と表示
  • Node.js:処理と判断
  • Service:実処理

今回も責務はきれいに分かれている。


Day07のまとめ

  • POSTでデータを送れるようになった
  • express.json()は必須
  • AngularではFormsModuleが必要
  • これでCRUDの「C」ができた

ここまで来たら、
もう業務アプリの骨格は完成している。


次回予告

Day08:データを一覧表示する(簡易CRUD完成へ)

ここから
「管理画面」っぽくしていく。

コメント

Copied title and URL