【问题标题】:System validation failed - Node / Express / Mongoose系统验证失败 - Node / Express / Mongoose
【发布时间】:2020-05-15 14:39:14
【问题描述】:

当我提交表单时,我收到以下错误:错误 [ValidationError]: 系统验证失败:lastName: Path lastName is required., firstName: Path firstName is required.

我不确定是什么原因造成的,当我使用 console.log(formData) 时,我得到了提交到表单中的数据。

App.js

const express = require('express')
const app = express();
const mongoose = require('mongoose');
const dotenv = require ('dotenv/config');

const System = require('./models/System');

app.use(express.urlencoded({ extended: true }));
app.use(express.json());

app.get('/', (req,res) => {
  res.render('index.ejs');
});


app.post('/post-feedback', (req, res) => {
  const formData = {
    firstame: req.body.firstName,
    lastname: req.body.lastName,
    assetTag: req.body.assetTag
  }

  const system = new System(formData);

  system.save()
    .then(result => {
      console.log(result);
    })
    .catch(err => {
      console.log(err);
    });
});

型号:

const mongoose = require('mongoose');

var SystemSchema = new mongoose.Schema({
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    assetTag: {
        type: Number,
        required: true
    }
});

module.exports = mongoose.model('System', SystemSchema);

表格:

      <form action="/post-feedback" method="POST">
                  <div class="form-group">
                    <label for="firstName">First Name: </label>
                       <input type="text" class="form-control" id="firstName" name="firstName">  
                  </div>
                  <div class="form-group">
                    <label for="lastName">Last Name: </label>
                       <input type="text" class="form-control" id="lastName" name="lastName">  
                  </div>
                  <div class="form-group">
                    <label for="assetNum">Asset Tag: </label>
                       <input type="text" class="form-control" id="assetTag" name="assetTag">  
                  </div>
                    <button type="submit" name="submit" class="btn btn-primary">Submit</button>
                </form>

【问题讨论】:

  • 您需要更新两件事,首先是 formdata 对象键,因为它们应该与架构匹配,第二个 assetsTag 也应该是字符串。

标签: node.js mongodb forms express mongoose


【解决方案1】:

您遇到错误的唯一原因是您在 formData 上打错了字。它必须是firstNamelastName,确保它与您的架构字段相同,然后确保您的assetTag 是一个数字,因为您的架构类型是数字。

你可以试试下面这段代码:

app.post('/post-feedback', (req, res) => {
  const formData = {
    // you're typo here: firstame
    firstName: req.body.firstName,
    // you're typo here: lastname
    lastName: req.body.lastName,
    // must be number
    assetTag: parseInt(req.body.assetTag);
  }

  const system = new System(formData);

  system.save()
    .then(result => {
      console.log(result);
    })
    .catch(err => {
      console.log(err);
    });
});

希望对你有帮助。

【讨论】:

    【解决方案2】:
    app.post('/post-feedback', (req, res) => {
    
       const system = new System(req.body);
    
      system.save()
        .then(result => {
          console.log(result);
        })
        .catch(err => {
          console.log(err);
        });
    });
    

    我认为上面的代码应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-11
      • 2018-11-03
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      相关资源
      最近更新 更多