javascript - Bir PayloadCMS hatam var. ValidationError: Aşağıdaki alan geçersiz: email


npx create-payload-app kullanarak bir payload uygulaması oluşturuyorum ve boş şablonu kullanmayı seçtim

Bende bu var. ValidationError: Aşağıdaki alan geçersiz: email

src/tohum/index.ts

import { Payload } from 'payload';
import { customerForm } from './customerForm';

export const seed = async (payload: Payload) => {
  const customerFormJSON = JSON.parse(JSON.stringify(customerForm));

  const { id: customerFormID } = await payload.create({
    collection: 'customer', 
    data: customerFormJSON,
  });

};

src/seed/musteriFormu.ts

export const customerForm = {
    id: '63c0651b132c8e2783f8dcae',
    updatedAt: '2023-01-12T21:25:41.113Z',
    createdAt: '2022-12-28T20:48:53.181Z',
    title: 'Customer Form',
    fields: [
      {
        name: 'firstName',
        label: 'First name',
        width: 50,
        required: true,
        id: '63adaaba5236fe69ca8973f8',
        blockName: 'first-name',
        blockType: 'text',
      },
      {
        name: 'lastName',
        label: 'Last name',
        width: 50,
        required: true,
        id: '63bf4b1fd69cef4f34272f9a',
        blockName: 'last-name',
        blockType: 'text',
      },
      {
        name: 'email',
        label: 'Email',
        width: 100,
        required: true,
        id: '63bf4b1fd69cef4f34272f9b',
        blockName: 'email',
        blockType: 'text',
      },
    ],
    redirect: {},
  };
  

src/collections/Musteriler.ts

import { CollectionConfig, Block } from 'payload/types';

export const Customers: CollectionConfig = {
  slug: 'customer',
  // auth: true,
  fields: [
    {
      name: 'firstName',
      type: 'text',
      // required: true,
    },
    {
      name: 'lastName',
      type: 'text',
      // required: true,
    },
    {
      name: 'email',
      type: 'text',
      // required: true,
    },
  ]
}

src/sunucu.ts

import express from 'express';
import payload from 'payload';
import { seed } from './seed'


require('dotenv').config();
const app = express();

// Redirect root to Admin panel
app.get('/', (_, res) => {
  res.redirect('/admin');
});

const start = async () => {
  // Initialize Payload
  await payload.init({
    secret: process.env.PAYLOAD_SECRET,
    mongoURL: process.env.MONGODB_URI,
    express: app,
    email: {
      fromName: 'Admin',
      fromAddress: '[email ',
      logMockCredentials: true,
    },
    onInit: async () => {
      payload.logger.info(`Payload Admin URL: ${payload.getAdminURL()}`)
    },
  })

  // Add your own express routes here

  if (process.env.PAYLOAD_SEED === 'true') {
    payload.logger.info('---- SEEDING DATABASE ----');
    await seed(payload);
  }

  app.listen(3000);
}

start();

customers.ts dosyasında (required: true) yorumdan çıkardığımda bu hatayı alıyorum: ValidationError: followingFieldsInvalid firstName, lastName

customers.ts dosyasında yorum yaptığımda (gerekli: true) ValidationError: Aşağıdaki alan geçersiz: email

Not: Veri oluşturmak için yalnızca payload.create kullanmak istiyorum.

Her türlü yardım takdir edilir

Cevap #1

Sorunu buldum. Sorun, email, firstName veya lastName alanlarındaki benzersiz kısıtlamayı silip/yorum satırı yapmam ama veritabanını güncellemeyi unutmamdı. Payload CMS koleksiyon yapılandırmanızdan (email, firstName, lastName veya name için) benzersiz kısıtlamayı kaldırmış olsam da, değişikliklerimden sonra düzgün bir şekilde güncellenmediyse MongoDB bunu veritabanı düzeyinde hala uygulayabilir. 'name' alanındaki benzersiz kısıtlamanın hâlâ var olup olmadığını onaylamak için MongoDB koleksiyonumun indekslerini manuel olarak inceledim.

böyle:

mydb> db.generics.getIndexes()
[
  { v: 2, key: { _id: 1 }, name: '_id_' },
  {
    v: 2,
    key: { name: 1 },
    name: 'name_1',
    background: true,
    unique: true
  }
]
mydb> db.generics.dropIndex("name_1")
{ nIndexesWas: 2, ok: 1 }

İlgili makaleler