[ Home ]
back

htmx , zod検証

id: 127, 2024-08-25

概要:

htmx + zod使う例になります。

  • bundler は、Viteを使用する例です。

[ 作成日: 2024/08/25 ]


構成

  • htmx
  • Vite:5.2
  • typescript: 5.4
  • express
  • tailwindcss

作成したコード


  • hx-post: POST送信します。
  • example/zod/src/pages/Zod.ts
      <form
      hx-post="/api/zod/test"
      hx-trigger="submit"
      hx-target="#resulte_form1"
      hx-on--before-request=""
      hx-on--after-request="Zod.afterPostForm1()"
      >
        <label>title</label>
        <input type="text" name="title"
        class="mx-2 border border-gray-400 rounded-md px-3 py-2 focus:outline-none focus:border-blue-500" 
        /><br />
        <hr class="my-2" />
        <label>content</label>
        <input type="text" name="content"
        class="mx-2 border border-gray-400 rounded-md px-3 py-2 focus:outline-none focus:border-blue-500"
        />   
        <hr class="my-2" />
        <button type="submit"
        class="ms-2 bg-transparent hover:bg-purple-500 text-purple-700 font-semibold hover:text-white py-2 px-4 border border-purple-500 hover:border-transparent rounded"
        >Add</button>
      </form>
      <hr />
      <div id="resulte_form1" class="d-none">ここに表示</div>

  • example/zod/src/routes/zod.ts
  • API: zod検証、レスポンス返却します。
router.post("/test", async function(req: any, res: any) {
  const retObj ={success: false, data:{}, errors: {}}
  try {
console.log(req.body);
    if(req.body){
      FormData.parse(req.body);
    }
    retObj.success = true;
    retObj.data = req.body;
    res.json(retObj);
  } catch (error) {
    console.error(error);
    retObj.errors = error.flatten().fieldErrors;
    res.json(retObj);
//    res.sendStatus(500);
  }
});

https://github.com/kuc-arc-f/express_48htmx/blob/main/example/zod/src/routes/zod.ts