اذهب إلى المحتوى

السؤال

نشر (معدل)

السلام عليكم.

لاحظت أنه في العديد من المشاريع بلغة node js يتم استعمال مكتبة  joi  للتحقق من البيانات.

في الواقع هي مكتبة مستعملة بصفة كبيرة جدا مما يدل على أهميتها.

متى يحبذ استخدام هذه المكتبة ام ان تنزيلها هو مجرد إضافة جيدة للمشروع.

شكرا.

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال

Recommended Posts

  • 0
نشر

مكتبة Joi هي مكتبة شهيرة في عالم Node.js تستخدم للتحقق من صحة وتحليل وتنسيق البيانات. توفر Joi مجموعة قوية من الأدوات والوظائف للتحقق من البيانات والتأكد من تطابقها مع قواعد وشروط محددة.

تحظى Joi بشعبية كبيرة في مجتمع Node.js للعديد من الأسباب. إليك بعض الحالات التي يفضل فيها استخدام مكتبة Joi:

التحقق من صحة البيانات: إذا كان لديك بيانات تدخل إلى تطبيقك، مثل بيانات المستخدم المرسلة عبر نماذج أو طلبات API، فإن استخدام Joi يساعد في التحقق من صحة تلك البيانات وضمان أنها تفي بالمتطلبات المحددة.

التحقق من بنية البيانات: يمكن استخدام Joi للتحقق من تنسيق وبنية البيانات، مثل التأكد من أن البيانات هي كائن JSON صحيح، أو أن السلسلة هي بريد إلكتروني صالح، أو أن رقم الهاتف مطابق لنمط محدد، وما إلى ذلك.

توثيق البيانات: Joi يمكن استخدامه لإعداد وثائق توثيقية لبنية البيانات في التطبيق، مما يسهل فهم كيفية بناء البيانات وما هي المتطلبات المتوقعة.

التحقق من البيانات في الموديلات: إذا كنت تستخدم إطار عمل مثل Express.js وتستخدم نماذج لتمثيل بيانات الموديلات، فيمكنك استخدام Joi للتحقق من صحة بيانات الموديلات قبل حفظها في قاعدة البيانات.

بشكل عام، يعد استخدام Joi أمرًا مفيدًا وقويًا للتحقق من البيانات في تطبيقات Node.js. إذا كان لديك حاجة للتحقق من صحة البيانات أو توثيقها أو تنسيقها، فإن استخدام Joi قد يكون اختيارًا جيدًا وقد يساعد في تحسين جودة وموثوقية تطبيقك.

  • 0
نشر

يمكن استخدامها في كل المشاريع التي تحتاج validation حيث ان وظيفة المكتبة الرئيسية هي التحقق من البيانات الواردة في الطلبات (scheme validation).

وهذا مثال على كيفية استخدامها :

const Joi = require('joi');

const schema = Joi.object({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),

    password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),

    repeat_password: Joi.ref('password'),

    access_token: [
        Joi.string(),
        Joi.number()
    ],

    birth_year: Joi.number()
        .integer()
        .min(1900)
        .max(2013),

    email: Joi.string()
        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
})
    .with('username', 'birth_year')
    .xor('password', 'access_token')
    .with('password', 'repeat_password');


schema.validate({ username: 'abc', birth_year: 1994 });
// -> { value: { username: 'abc', birth_year: 1994 } }

schema.validate({});
// -> { value: {}, error: '"username" is required' }

// Also -

try {
    const value = await schema.validateAsync({ username: 'abc', birth_year: 1994 });
}
catch (err) { }

 

  • 0
نشر

المكتبة Joi هي مكتبة جيدة للتحقق من صحة البيانات في Node.js. يحبذ استخدام هذه المكتبة في المشاريع التي تحتاج إلى التحقق من البيانات المدخلة بشكل دقيق، مثل تطبيقات الويب التي تتعامل مع بيانات المستخدم. 

لتوضيح استخدام المكتبة، يمكنني إعطائك مثال بسيط على كيفية استخدامها. في المثال التالي، سنقوم بإنشاء مجموعة من القواعد للتحقق من صحة البيانات المدخلة:

const Joi = require('joi');

const userInput = {
  username: 'mohammed',
  password: '123456',
  email: 'mohammed@example.com'
};

const schema = Joi.object({
  username: Joi.string()
    .alphanum()
    .min(3)
    .max(30)
    .required(),
  password: Joi.string()
    .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$'))
    .required(),
  email: Joi.string()
    .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net', 'io'] } })
    .required()
});

const { error, value } = schema.validate(userInput);

if (error) {
  console.log(error.details[0].message);
} else {
  console.log('Validation successful!');
}

في هذا المثال، يتم استخدام Joi للتحقق من صحة البيانات المدخلة من المستخدم. يتم تحديد القواعد باستخدام دوال مثل `alphanum` و `min` و `max` و `required` و `pattern` و `email`. يمكن استخدام هذه القواعد للتحقق من صحة بيانات المدخلات مثل اسم المستخدم وكلمة المرور والبريد الإلكتروني. 

إذا كانت البيانات التي تم إدخالها صحيحة  ستظهر الرسالة "Validation successful!" في وحدة تحكم(console). وإذا كان هناك خطأ، سيتم عرض رسالة الخطأ المناسبة. 

يوجد العديد من الفوائد التي تقدمها مكتبة Joi لتحقق من صحة البيانات، ومن بين هذه الفوائد:

1. زيادة الأمان والموثوقية: يتيح استخدام Joi التحقق من صحة البيانات تجنب الأخطاء التي قد تحدث بسبب إدخال بيانات غير صحيحة أو غير متوقعة من قبل المستخدمين، مما يجعل التطبيق أكثر أمانًا.

2. توفير الوقت والجهد:  توفر Joi الوقت والجهد اللازمين للتحقق من صحة البيانات يدويًا، حيث أنها تساعد على تحديد القيود والقواعد المطلوبة لتحقق من صحة البيانات بدقة وسرعة (من خلال الدوال الجاهزة الخاصة بها).

3. توفير الكود: تساعد Joi على توفير الكود المطلوب لتحقق من صحة البيانات، حيث أنها توفر واجهة برمجة التطبيقات (API) بسيطة وسهلة الاستخدام لتحديد القيود والقواعد المطلوبة.

4. تقليل الأخطاء: باستخدام Joi، يمكن تقليل الأخطاء التي قد تحدث بسبب إدخال بيانات غير صحيحة أو غير متوقعة من قبل المستخدمين، مما يساعد في تجنب المشاكل والأخطاء التي يمكن أن تتسبب في تعطيل التطبيق أو تسبب أضرارًا للمستخدمين.

5. تحسين تجربة المستخدم: تحسن Joi تجربة المستخدم في التطبيقات، حيث يتم تجنب إرسال البيانات الغير صحيحة أو الغير متوقعة، مما يجعل التطبيق أكثر سهولة ويسرًا في الاستخدام.

6. مرونة وقابلية التخصيص: يمكن تعديل Joi بسهولة لتحقيق الاحتياجات الخاصة بالتطبيق، حيث يمكن تحديد القيود والقواعد المطلوبة بناءً على نوع البيانات المطلوب تحققها، مما يساعد في تحقيق المرونة والقابلية للتخصيص.

  • 0
نشر

مكتبة Joi تعتبر سهلة الاستخدام وتوفر واجهة برمجة تطبيق (API) بسيطة وواضحة، وهي خيار جيد إذا كنت معتاد على استخدامها.

لكن هنا مكتبة Yup أيضًا توفر واجهة برمجة سهلة الاستخدام وتحقق من البيانات بشكل مشابه لـ Joi، وإذا كنت تعمل على تطبيق React في نفس الوقت، فالأفضل استخدام Yup فهى أكثر تكاملاً مع بيئة العمل تلك.

الفرق الرئيسي هو أن Joi هي مكتبة مستقلة تمامًا وتستخدم بشكل شائع في تطبيقات Node.js، في حين أن Yup هي مكتبة تستخدم على نطاق واسع في تطبيقات React وتدعم أيضًا استخدامها في Node.js.

فإذا كنت تعمل على تطبيق React، فقد يكون استخدام Yup أكثر تكاملاً وسهولة مع بيئة العمل تلك، حيث أنها تتكامل بشكل أفضل مع نظام التحكم في النماذج الخاص بـ React وتوفر تعبيرًا أكثر سهولة عند تحديد قواعد التحقق.

وإليك مثال:

import React, { useState } from 'react';
import { useFormik } from 'formik';
import * as Yup from 'yup';

// تعريف مخطط التحقق باستخدام Yup
const validationSchema = Yup.object().shape({
  name: Yup.string().required('يرجى إدخال الاسم'),
  email: Yup.string().email('صيغة البريد الإلكتروني غير صحيحة').required('يرجى إدخال البريد الإلكتروني'),
  password: Yup.string().min(6, 'يجب أن تحتوي كلمة المرور على الأقل على 6 أحرف').required('يرجى إدخال كلمة المرور'),
});

const MyForm = () => {
  const formik = useFormik({
    initialValues: {
      name: '',
      email: '',
      password: '',
    },
    validationSchema: validationSchema,
    onSubmit: (values) => {
      // إجراء عند تقديم النموذج بنجاح
      console.log(values);
    },
  });

  return (
    <form onSubmit={formik.handleSubmit}>
      <div>
        <label htmlFor="name">الاسم:</label>
        <input
          type="text"
          id="name"
          name="name"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.name}
        />
        {formik.touched.name && formik.errors.name && <div>{formik.errors.name}</div>}
      </div>

      <div>
        <label htmlFor="email">البريد الإلكتروني:</label>
        <input
          type="email"
          id="email"
          name="email"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.email}
        />
        {formik.touched.email && formik.errors.email && <div>{formik.errors.email}</div>}
      </div>

      <div>
        <label htmlFor="password">كلمة المرور:</label>
        <input
          type="password"
          id="password"
          name="password"
          onChange={formik.handleChange}
          onBlur={formik.handleBlur}
          value={formik.values.password}
        />
        {formik.touched.password && formik.errors.password && <div>{formik.errors.password}</div>}
      </div>

      <button type="submit">تأكيد</button>
    </form>
  );
};

export default MyForm;

الكود يقوم باستخدام Yup لتعريف مخطط التحقق (validationSchema) الذي يحتوي على قواعد التحقق من صحة البيانات، ويطبق ذلك المخطط على النموذج الذي تم تعريفه باستخدام useFormik، وعرض الأخطاء في حالة عدم صحة البيانات في الوقت الفعلي، و تنفيذ الإجراء المحدد عند تقديم النموذج بنجاح.

وإذا أردت الإطلاع على مكتبات أخرى يوجد Ajv وهي مكتبة تحقق من بيانات JSON تدعم معيار JSON Schema، توفر مرونة كبيرة في تحديد قواعد التحقق والتصفية وتدعم تخصيصات متقدمة.

  • 0
نشر

يفضل استخدام مكتبة Joi في المشاريع التي تحتوي على بيانات حساسة أو تطبيقات تتعامل مع البيانات الحساسة، مثل بيانات المستخدمين أو المعلومات المالية. يتم استخدام Joi للتحقق من صحة البيانات والتأكد من أن البيانات المدخلة تلبي المتطلبات اللازمة. يمكن استخدام Joi للتحقق من البيانات المدخلة في العديد من الأمور، مثل التحقق من البريد الإلكتروني الصحيح، التحقق من الأسماء، التحقق من رقم الهاتف والعناوين.

من الأمثلة التي يمكن فيها استخدام Joi:

  • تطبيق يتطلب إدخال بيانات المستخدم مثل الاسم والبريد الإلكتروني ورقم الهاتف، ويحتاج إلى التحقق من صحة هذه البيانات.
  • تطبيق يتطلب إدخال معلومات مالية مثل الرقم السري للبطاقة الائتمانية، ويحتاج إلى التحقق من أن هذه المعلومات صحيحة.
  • تطبيق يتطلب إدخال مواقع الويب أو العناوين الإلكترونية للتأكد من صحتها.

من الجوانب الأخرى، ليس من الضروري استخدام Joi في كل المشاريع، وخاصة في المشاريع الصغيرة التي لا تتطلب التحقق من صحة البيانات بشكل كبير. بالإضافة إلى ذلك، يمكن استخدام بعض الحلول البديلة لـ Joi، مثل:

  • مكتبة express-validator: تمكنك من تحقق الطلبات الواردة في تطبيق Node.js الخاص بك والتأكد من صحتها.
  • مكتبة Yup: تستخدم للتحقق من صحة البيانات في React.js ويمكن استخدامها في تطبيقات الويب الأخرى.
  •  مكتبة Ajv: تستخدم للتحقق من صحة البيانات في JSON Schema.

بشكل عام، يمكن استخدام Joi في المشاريع التي تتطلب التحقق من صحة البيانات بشكل كبير، ويمكن الاستعانة بالبدائل المذكورة أعلاه في المشاريع الصغيرة أو المشاريع التي لا تتطلب التحقق من صحة البيانات بشكل كبير.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...