如何解决验证时的猫鼬错误

时间:2019-09-24 11:05:57

标签: node.js mongoose

我正在构建一个API,该API允许用户将某些数据记录到数据库(MongoDB)中,但问题是我不断出现以下错误:

UnhandledPromiseRejectionWarning: ValidationError: item validation failed: productName: Path `productName` is required.

这是我的架构:

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

//create Schema
const ItemSchema = new Schema({

   productName : {
       type : String,
       required:true
   } ,
   description : {
       type :String,
       default:true
   },
   supplier : {
       type :String,
       default:true
   },
   price : {
       type :Number,
       default:true
   },
   date : {
       type :Date,
       default:Date.now
   }
});

module.exports=Inventory=mongoose.model('item',ItemSchema,'inventory');

这是提交帖子的路线:

const express= require('express');
const router = express.Router();

//Items model
const Inventory = require('../../../models/Inventory');


router.post('/',(req,res)=>{

    const newInventory= new Inventory({
        productName:req.body.productName,
        description:req.body.description,
        supplier:req.body.supplier,
        price:req.body.price,
    });
       newInventory.save().then(item=>res.json(item))
   });


我不知道为什么会引发验证错误!

1 个答案:

答案 0 :(得分:1)

这是我解决问题的步骤

首先,我检查了我从请求身体得到的东西

const express= require('express');
const router = express.Router();

//Items model
const Inventory = require('../../../models/Inventory');
console.log(req.body) //checking for content of req.body

router.post('/',(req,res)=>{

    const newInventory= new Inventory({
        productName:req.body.productName,
        description:req.body.description,
        supplier:req.body.supplier,
        price:req.body.price,
    });
       newInventory.save().then(item=>res.json(item))
   });

我有一个空对象{},这意味着我一开始没有收到任何请求。使用Postman进行测试,我将选项从“表单数据”更改为:

 x-www-form-urlencoded

这使我的请求正文充满了数据,错误消失了!