我尝试将数据保存在 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/