node.js - Mongoose 所需的验证器失败值未定义

标签 node.js mongodb mongoose

我尝试将数据保存在 Mongoose 模式中,但所需的验证器失败,错误消息显示该值未定义,但之前的日志表明它有一个值。

我尝试使用新的 mongoose.Schema 而不是新的 Schema,但这也不起作用。

当我删除所需的标签时,它会保存,但它是空的: { 预订编号: { _id: 5d4b47d7685936130080eb70, __v: 0 } }

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

const BookingNumberSchema = new Schema({
    number: {
        type: Number,
        required: true,
    },
    description: {
        type: String,
        required: true,
    },
});

const BookingNumber = mongoose.model('BookingNumber', BookingNumberSchema);

module.exports = BookingNumber;



function createBookingNumber(req, res){ 

    console.log(req.body);
    BookingNumber.create(req.body)
        .then(bookingNumber =>{
            let reply = {
                "bookingNumber": bookingNumber
            }
            res.status(200);
            console.log(reply);
            res.send(reply);
        })
        .catch(err =>{
            res.status(400);
            console.log(err);
            res.send(err);
        });
}

在我的 app.js 中,我使用 bodyParser.json 和过滤器来进行 nosql 攻击:

app.use(bodyParser.json());

app.use(filter());

postman 数据:

{
    "bookingNumber": { 
        "number": 1,
        "description": "example bookingnumber"
    }
} 

回复:

{
    "errors": {
        "description": {
            "message": "Path `description` is required.",
            "name": "ValidatorError",
            "properties": {
                "message": "Path `description` is required.",
                "type": "required",
                "path": "description"
            },
            "kind": "required",
            "path": "description"
        },
        "number": {
            "message": "Path `number` is required.",
            "name": "ValidatorError",
            "properties": {
                "message": "Path `number` is required.",
                "type": "required",
                "path": "number"
            },
            "kind": "required",
            "path": "number"
        }
    },
    "_message": "BookingNumber validation failed",
    "message": "BookingNumber validation failed: description: Path `description` is required., number: Path `number` is required.",
    "name": "ValidationError"
}

控制台日志:

{ bookingNumber: { number: 1, description: 'example bookingnumber' } }
{ ValidationError: BookingNumber validation failed: description: Path `description` is required., number: Path `number` is required.
        message: 'Path `description` is required.',
        name: 'ValidatorError',
        properties: [Object],
        kind: 'required',
        path: 'description',
        value: undefined,
        reason: undefined,
        [Symbol(mongoose:validatorError)]: true },
     number:

我看起来输入值没有传递给 Mongoose ,但我找不到原因。

最佳答案

在你发送数据的 postman 中:

{
   "bookingNumber": { 
       "number": 1,
       "description": "example bookingnumber"
   }
} 

并且您的架构 BookingNumber 没有像您使用嵌套对象发送“bookingNumber”那样的键, Mongoose 验证器检查没有“编号”和“描述”,这就是您的请求失败的原因。 只需发送如下:

{ 
   "number": 1,
   "description": "example bookingnumber"
}

关于node.js - Mongoose 所需的验证器失败值未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57403035/

相关文章:

javascript - 向除发件人以外的所有客户端发送响应

node.js - 尝试在嵌入字段上确保索引时出错(键名不能包含 ".")

javascript - Mongoose Node js 中的“TypeError : meme. find(...).forEach 不是函数”?

mongodb - 如何在 Mongoose 中使用 Document#update?

MongoDB 和 Mongoose : How to find and remove a large group of documents. findAndModify(..... {删除 :true})?

node.js - 反向填充 Mongoose

node.js - 带有 Angular2 项目的 ExpressJs 的文件结构

c++ - Node.js 的原生 C++ 扩展 : "cloning" a Local< Value > in the constructor

c# - MongoDb C# 驱动程序在一个原子操作中更新多个文档

MongoDB 选择计数组