首页 > 解决方案 > 尝试提交和验证表单,但它挂起并出现错误 - 标题:ValidatorError: Path `title` is required

问题描述

我是 JS 和 MongoDB 的新手,正在尝试组合一个简单的 CMS。我收到以下错误:

title: ValidatorError: Path `title` is required.
       {
      properties: [Object],
      kind: 'required',
      path: 'title',
      value: undefined,
      reason: undefined,
      [Symbol(mongoose:validatorError)]: true }

这是我的控制器:

const { restart } = require("nodemon");

const Post = require('../models/postModel').Post;

module.exports = {
    index: (req, res) => {
      res.render('admin/index');
    },
    
    getPosts: (req, res) => {
      res.render('admin/posts/index');
    },

    submitPosts: (req, res) => {
      console.log(req.body);
      const newPost = new Post({
        title: req.body.title,
        description: req.body.description,
        status: req.body.status
      });

      newPost.save().then(post => {
        console.log(post);
        req.flash('success-message', 'Post created successfully.');
        res.redirect('/admin/posts');
      }, err => console.log(err))
    },

    createPosts: (req, res) => {
      res.render('admin/posts/create');
    }
};

这是我的帖子模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const PostSchema = new Schema({

    title: {
        type: String,
        required: true
    },

    status: {
        type: String,
        default: 'public' 
    },

    creationDate: {
        type: Date,
        default: Date.now()
    }
})


module.exports = {Post: mongoose.model('post', PostSchema)};

这是我要提交的 HTML 表单:

<div class="container">
    <h1>Create New Post</h1>
    
    <div class="row p-4">
        <div class="col-md-10">
            <form action="/admin/posts/create" method="post" enctype="multipart/form-data">
                
                <div class="form-group">
                    <label for="title">Title</label>
                    <input type="text" class="form-control" name="title" id="title" placeholder="Enter The Title">
                </div>
                
                <div class="form-group">
                    <label for="file">File Upload</label>
                    <input type="file" class="form-control" id="file" name="uploadedFile"  accept="image/jpeg, image/jpg, image/png, image/bmp">
                </div>

                <div class="form-group">
                    <label for="status">Status</label>
                    <select name="status" id="status" class="form-control">
                        <option value="public">Public</option>
                        <option value="private">Private</option>
                        <option value="draft">Draft</option>
                    </select>
                </div>


                <div class="form-group">
                    <label for="category">Category</label>
                    <select name="category" id="category" class="form-control">
                        {{#each categories}}
                            <option value="{{_id}}">{{title}}</option>    
                        {{/each}}
                                             
                    </select>
                </div>
                
                
                
                <div class="form-check ml-3">
                    <label for="allowComments">
                        <input type="checkbox" class="form-check-input" id="allowComments" name="allowComments">
                        Allow Comments
                    </label>
                </div>
                
                <div class="form-group">
                    <label for="description">Content</label>
                    <textarea name="description" id="description" class="form-control" placeholder="Enter your content here" rows="10"></textarea>
                </div>
                
                
                <button class="btn btn-outline-success btn-lg" type="submit">Create Post</button>
                
                
            </form>
        </div>
    </div>
    
    
    
</div>

有人可以帮我找到问题吗?几天来我一直在努力解决这个问题……非常感谢!

标签: javascriptformsvalidationmongoose

解决方案


推荐阅读