javascript - Jag har ett PayloadCMS-fel. ValidationError: Följande fält är ogiltigt: email


Jag skapar en payload-app med npx create-payload-app och jag valde att använda en tom mall

Jag har detta. ValidationError: Följande fält är ogiltigt: e-post

src/seed/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/customerForm.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/Customers.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/server.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();

När jag avkommenterar (required: true) i customers.ts får jag detta fel: ValidationError: followingFieldsInvalid firstName, lastName

när jag kommenterar (obligatoriskt: sant) i customers.ts ValidationError: Följande fält är ogiltigt: email

OBS: Jag vill bara använda payload.create för att skapa data.

All hjälp uppskattas

Svar #1

Jag kom på problemet. Problemet var att jag raderade/kommenterade den unika begränsningen på fälten email, firstName eller lastName men glömde uppdatera databasen. Även om jag tog bort den unika begränsningen från din Payload CMS-kollektionskonfiguration (för email, firstName, lastName eller name), kan MongoDB fortfarande upprätthålla den på databasenivå om den inte uppdaterades korrekt efter mina ändringar. Jag inspekterade manuellt indexen i min MongoDB-kollektion för att bekräfta om den unika begränsningen på fältet 'name' fortfarande finns.

som detta:

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 }

Relaterade artiklar