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 }
