• 1399/12/15

schema Yup طراحی :

سلام استاد 

استاد من با Yup یه schema  طراحی کردم ولی یه چند تا مشکل داره

 

اطلاعاتی که ارسال میشه به این شکل هست

{
    "title": "title",
    "body": "body",
    "image": "604226ae98b3f00a9cdb50a8",
    "category": "60410cbc70a6f52fb4e3bce3",
    "status": "public",
    "actor": [
        {"idActor":"60420e33dc029327d4522917"},
        {"idActor":"60420e77337f1e27e4278538"},
        {"idActor":"6042180625c39336c8f57886"}
    ],
    "files": [
        {"file":"603fa2af6adfc805483ea5e4"},
        {"file":"603fa30400bd6734a0589bb9"},
        {"file":"603fa3311242441594373bee", "Description":"قسمت سوم"}
    ]
}

 

schema  که من با Yup درست کرم 

const Yup = require("yup");

exports.schema = Yup.object().shape({
  title: Yup.string()
    .required("عنوان مراسم الزامی می باشد")
    .min(5, "عنوان مراسم نباید کمتر از 5 کارکتر باشد")
    .max(100, "عنوان مراسم نباید بیشتر از 100 کاراکتر باشد"),
  body: Yup.string().required("مراسم جدید باید دارای محتوا باشد"),
  image: Yup.string().required("مراسم جدید باید دارای عکس باشد"),
  category: Yup.string().required("دسته بندی الزامی است"),
  status: Yup.mixed().oneOf(
    ["private", "public"],
    "یکی از 2 وضعیت خصوصی یا عمومی را انتخاب کنید"
  ),
  actors: Yup.array(
    Yup.object({
      actor: Yup.string().required("مجری مراسم الزامی می باشد"),
    })
  ).required("!مراسم باید مجری داشته باشد"),
  files: Yup.array(
    Yup.object({
      file: Yup.string().required("مدیا الزامی است"),
      Description: Yup.string(),
    })
  ).required("!مراسم باید رسانه داشته باشد"),
});

 

schema  پایگاه داده 

const mongoose = require("mongoose");

const { schema } = require("./secure/riteValidation");

const riteSchmea = new mongoose.Schema({
  title: {
    type: String,
    trim: true,
    unique: true,
    required: true,
    minlength: 5,
    maxlength: 100,
  },
  body: {
    type: String,
    required: true,
  },
  image: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Multimedia",
    required: true,
  },
  category: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "Category",
    required: true,
  },
  status: {
    type: String,
    default: "public",
    enum: ["private", "public"],
  },
  actors: [
    {
      idActor: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Actors",
        required: true,
      },
    },
  ],
  files: [
    {
      file: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "Multimedia",
        required: true,
      },
      Description: String,
    },
  ],
  writer: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
    required: true,
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
  updated: {
    type: Date,
    default: Date.now,
  },
});

riteSchmea.statics.riteValidation = function (body) {
  return schema.validate(body, { abortEarly: false });
};

module.exports = mongoose.model("Rite", riteSchmea);

 

خوب استاد بریم سر سوال 😊😁

استاد مشکل من اونجاست که 😭 اگه فیلد های  actors و files به صورت خالی ارسال بشه ذخیره میشه و اصلا Yup  نمی تونه هندل کنه و error را بفرسته

می دونم مشکل من توی  Yup  schema  هست میشه کمکم کنید 🙏🏻🙏🏻

 

 

  • 1399/12/16
  • ساعت 16:50

سلام دوست من

به جای required میتونی بگی کمتر از 1 نباشه

این لینک رو ببین


  • 1399/12/17
  • ساعت 16:09

مرسی ممنون 

استاد یه سوال دیگه اگه بخواهیم توی Yup بررسی کنیم توی پارامتر های ارسالی یه فیلید وجود نداشته باشه . مثلا 

توی درخواست ارسالی به سرور اگر پارامتری به نام view وجود داشت خطا بده 

را چطوری باید پیاده سازی کنم ؟


logo-enamadlogo-samandehi