あまり心配しないでください。Node プロジェクトでのデータ検証には Zod モードを安全に使用できます。

ffb5fa8a0d1ab46a6884a1e850660c66.jpeg

データの検証は、特に構造や形式が不明なさまざまなソースからのデータを扱う場合には、困難な作業になる可能性があります。フォーム、API、またはその他のサードパーティ ソースからのデータが、アプリケーションで定義したスキーマに準拠していることを確認することが重要です。

データ検証は、受信したデータの正確性と完全性を保証するため、あらゆるアプリケーション開発において不可欠です。

データ検証が重要な理由。

  • アプリケーションに入力されたデータが正しく、正しい形式であることを確認することで、エラーの発生を防ぎます。

  • アプリケーションのセキュリティを損なう可能性のある悪意のある入力を防止することで、システムのセキュリティを向上させます。

許可されるデータが正確で信頼できるものであることを保証することで、データ分析を促進し、有用な洞察をより簡単に生成できるようにします。
ただし、適切なツールがなければ、データ検証は非常に困難になる可能性があります。

ゾッドとは

Zod は、TypeScript ベースのスキーマ宣言および検証ライブラリです。私は「スキーマ」という用語を、単純な文字列から複雑なネストされたオブジェクトに至るまで、あらゆるデータ型を広く指すために使用します。

Zod を使用すると、あらゆるタイプのデータ スキーマを宣言し、タイプ セーフな方法でデータを検証できます。バリデーターを定義すると、Zod は静的な TypeScript 型を自動的に推論できます。コンパイル時に型チェックを実行する TypeScript とは異なり、Zod は実行時の型チェックを提供し、型安全性の追加層を提供します。

データ検証に Zod を使用する潜在的な利点

  • タイプセーフティ。これにより、よりタイプセーフな方法でデータを定義できるようになり、より堅牢で信頼性の高いコードが得られます。

  • 使いやすい。Zod の API は、チェーン可能なインターフェイス (z.string().min(20).nonempty() など) を使用して、シンプルで直感的なデータ スキーマの定義と検証を行います。

  • カスタマイズ性。Zod を使用すると、カスタム エラー メッセージや、データ変換や条件付き検証などのその他の検証オプションを作成できます。

  • パフォーマンスと開発者エクスペリエンス (DX)。Zod はスピードと効率性を核とし、シンプルで直感的な API によりフレンドリーな開発者エクスペリエンスを提供します。

Zod でデータを検証する

このセクションでは、zod を使用してさまざまなデータ型を定義および検証する方法を説明します。次の例は、API 経由でフロントエンドからデータを受信し、定義した zod データ スキーマに対してデータを検証する方法を示しています。

次のコードは、ユーザー ログインを処理する Express API を示しています。

import { Request, Response, Router } from "express";
import { z } from "zod";

const router = Router();

const userSchema = z.object({
  email: z.string().email().nonempty(),
  password: z.string().min(8).nonempty(),
});

function signIn(req: Request, res: Response) {
  const { email, password } = req.body;

  try {
    // Validate the incoming data against the userSchema
    userSchema.parse({ email, password });
    // If validation passes, further validate against data in db
  } catch (error) {
    // If validation fails, handle the error
    res.status(400).json({
      error: error,
    });
  }
}

// Routes
router.post("/signin", signIn);

export default router;
  • 上記のコードでは、電子メールとパスワードのプロパティを持つ zod ライブラリを使用して userSchema オブジェクトを定義しました。次に、.string().email().nonempty() などのいくつかの検証ルールを追加します。これは、後でユーザーが指定したデータを検証するために使用できます。.email() メソッドは基本的な電子メールの書式設定のみをチェックし、印刷可能な文字、引用符で囲まれたローカル部分、または絵文字を含む電子メールにはエラーのフラグを立てないことに注意してください。

  • zod スキーマの場合、.parse メソッドは、定義されたスキーマに対して提供されたデータを検証します。検証が成功すると、zod は完全な型情報を含むデータのディープ クローンを返します。検証が失敗した場合、zod はエラーをスローします。

  • Zod にエラーをスローさせずに検証エラーを適切に処理したい場合は、スキーマで .safeParse メソッドを使用できます。このメソッドは、success プロパティがブール値に設定されたオブジェクトを返します。data プロパティには解析されたデータ (検証が成功した場合)、error プロパティには検証エラー (検証が失敗した場合) が含まれます。

import { Request, Response, Router } from "express";
import { z } from "zod";

const router = Router();

const userSchema = z.object({
  email: z.string().email().nonempty(),
  password: z.string().min(8).nonempty(),
});

function signIn(req: Request, res: Response) {
  const { email, password } = req.body;

  // Validate the incoming data against the userSchema
  const result = userSchema.safeParse({ email, password });

  if (!result.success) {
    // If validation fails, handle the error
    res.status(400).json({
      error: result.error,
    });
    return;
  }

  // zod validation passed, further validate against data values in db

}

// Routes
router.post("/signin", signIn);

export default router;

非同期検証を実行する必要がある場合は、.parseAsync メソッドと .safeParseAsync メソッドを使用できます。

Zod の機能アーキテクチャ

Zod を使用すると、関数から渡される入力と返される出力を定義および検証することもできます。Zod では次のように関数パターンを定義できます。

z.function(args, returnType)

これには 2 つのパラメータが必要です。1 つ目は入力パラメータで、2 つ目のパラメータは関数から返されることが期待される関数の戻り値の型です。戻り値の型は、zod によって定義されたデータ スキーマにすることができます。

const signInSchema = z.function(z.object({
  body: z.object({
    email: z.string().email().nonempty(),
    password: z.string().min(8).nonempty(),
  })
}), z.undefined());

// Usage example
const req = { body: { email: "[email protected]", password: "password" } };
const res = { status: (code: number) => ({ json: (data: any) => console.log(code, data) }) };

const result = signInSchema.safeParse(signIn);
if (result.success) {
  result.data(req, res);
} else {
  console.error(result.error);
}

Zod 関数モードには、入力モードと出力モードの 2 つのパラメータがあります。この場合、入力スキーマは、電子メール フィールドとパスワード フィールドを持つ body プロパティを持つオブジェクトです。この関数は何も返さないため、出力モードは未定義です。

SignInSchema を使用すると、signInSchema.safeParse(signIn) を呼び出し、結果の success プロパティを確認できます。true の場合、結果の data プロパティを使用してリクエスト オブジェクトと応答オブジェクトを呼び出すことができます。false の場合、結果の error プロパティを使用してエラーを処理できます。

型の強制

Zod は、入力データを必要なデータ型に自動的に変換する、検証中に組み込みの強制機能を提供します。これは、外部ソースからのデータを検証し、それが予期される形式またはデータ型と一致することを確認する必要がある場合に便利です。

Zod で強制を使用する例を次に示します。

const { z } = require("zod");

const schema = z.object({
  name: z.string(),
  age: z.number().optional().transform((value) => {
    if (typeof value === "string") {
      return parseInt(value, 10);
    }
    return value;
  }),
});

const input = { name: "John", age: "20" };
const validatedData = schema.parse(input);

console.log(validatedData);
// Output: { name: "John", age: 20 }

この例では、年齢フィールドはオプションであり、数値として定義されています。入力値が文字列として提供された場合は、convert メソッドを使用して入力値を数値に強制します。入力値がすでに数値である場合、関数は単純にそれを返します。

キャストは状況によっては便利ですが、予期しない動作や潜在的なバグが発生する可能性もあることに注意してください。キャストは慎重に使用し、ユースケースで機能することを確認する必要があります。

Joi や Yup よりも Zod を好む潜在的な理由は次のとおりです。

  • Zod は比較的新しいライブラリ (2020 年に最初にリリース) であり、スキーマ検証に対するより現代的でユーザーフレンドリーなアプローチを提供することを目的としています。使いやすく、理解しやすいように設計されたシンプルで直感的な API を備えています。

  • Zod は同期検証と非同期検証の両方をサポートしており、API やデータベースから取得したデータを検証する必要がある場合など、場合によっては便利です。

  • Zod はタイプ セーフティを非常に重視しており、TypeScript 型のサポートを組み込みで提供しています。これは、プロジェクトで既に TypeScript を使用している場合に特に役立ちます。

  • Zod は非常にカスタマイズ可能で拡張性があり、特定のニーズに合わせてカスタム検証ルールとエラー メッセージを定義できます。

仕上げる

データ検証はあらゆるアプリケーション開発において重要な部分であり、受信したデータの正確性と完全性を保証します。ただし、適切なツールがなければ、データ検証は困難な作業になる可能性があります。

Zod は、TypeScript ベースのスキーマ宣言および検証ライブラリを提供します。これにより、タイプ セーフな方法であらゆるタイプのデータ スキーマを定義し、データを検証できます。

Zod は、タイプ セーフティ、使いやすさ、カスタマイズ性、開発者のエクスペリエンスを通じて、データ検証の点で大きなメリットを提供します。Zod を使用した検証をアプリケーションに実装することで、データ検証プロセスをより堅牢、信頼性、効率的に行うことができます。

記事のスペースが限られているため、今日の内容はここで共有します。記事の最後に、記事の作成は簡単ではないことを思い出していただきたいと思います。私の共有が気に入っていただけましたら、忘れないでください。より多くの人が困っているように、いいねや転送をしてください。同時に、フロントエンドテクノロジーについてもっと知識を得たい場合は、私をフォローすることを歓迎します。あなたのサポートが私にとって共有する最大の動機になります。今後もより多くのコンテンツを出力していきますので、ご期待ください。

ファンの特典

Tailwind Css に基づいた NodeJs バックグラウンド テンプレートのソース コードを共有します。nodejs と tailwindcss を学習したい場合は、このソース コードをお見逃しなく。

おすすめ

転載: blog.csdn.net/Ed7zgeE9X/article/details/132613552