ValidationError in mongoose/nodejs



当我想将产品添加到数据库(MongoDB)时。程序处于循环模式并且不会崩溃,但它会在控制台中显示错误。

控制台内容包含在底部

型号/单品.js

// models/single-product.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const productSchema = new Schema({
title: {
type: String,
required: true
},
description: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}
})
module.exports = mongoose.model('Product', productSchema)

模型/用户.js

// models/user.js
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const userSchema = new Schema({
username: {
type: String ,
required: true
},
email: {
type: String ,
required: true
},
cart: {
items:[
{
productId: {
type: Schema.Types.ObjectId,
ref: 'Product',
required: true
}, 
qty:{
type: Number ,
required: true
}
}
]
}
})
module.exports =mongoose.model('User', userSchema)

控制器/管理员.js

// constrollers/admin.js
const Product = require('../models/single-product')
module.exports.addProductsPage = (req,res)=> {
res.render('admin/add-product',{
pageTitle: "Add Product-Page"
})
}
module.exports.sendProducts = (req,res)=>{
const title = req.body.title
const description = req.body.description
const price = req.body.price
const products = new Product({
title: title,
description: description ,
price: price,
userId: req.user
})
products.save()
.then(result =>{
console.log('Product Created!')
res.redirect('/admin/add-product')
})
.catch(err =>{
console.log(err)
})

}
module.exports.getProducts = (req,res)=>{
Product.find()
.then(products =>{
res.render('admin/products',{
productsArray : products,
pageTitle : 'Admin Products'
})
})
.catch(err =>{
console.log(err)
})
}
module.exports.deleteProduct = (req,res)=>{
const pId = req.body.productId
Product.findByIdAndRemove(pId)
.then(()=>{
console.log('Product Deleted!')
res.redirect('products')
})
.catch(err =>{
console.log(err)
})
}

Error [ValidationError]: Product validation failed: userId: Path `userId` is required.
at ValidationError.inspect (D:AlirezawebTest project'sOnlineShop-Node.jsnode_modulesmongooseliberrorvalidation.js:59:24)
at formatValue (internal/util/inspect.js:550:31)
at inspect (internal/util/inspect.js:221:10)
at formatWithOptions (internal/util/inspect.js:1651:40)
at Object.Console.<computed> (internal/console/constructor.js:272:10)
at Object.log (internal/console/constructor.js:282:61)
at D:AlirezawebTest project'sOnlineShop-Node.jscontrollersadmin.js:25:17
at processTicksAndRejections (internal/process/task_queues.js:85:5) {

错误:{ userId: MongooseError [ValidatorError]: 路径userId是必需的。 at new ValidatorError (D:\Alireza\web\Test project's\OnlineShop-Node.jsode_modules\mongoose\lib\error\validator.js:29:11) at validate (D:\Alireza\web\Test project's\OnlineShop-Node.jsode_modules\mongoose\lib\schematype.js:1034:13) at D:\Alireza\web\Test project's\OnlineShop-Node.jsode_modules\mongoose\lib\schematype.js:1088:11 at Array.forEach () at ObjectId.SchemaType.doValidate (D:\Alireza\web\Test project's\OnlineShop-Node.jsode_modules\mongoose\lib\schematype.js:1043:14) at D:\Alireza\web\Test project's\OnlineShop-Node.jsode_modules\mongoose\lib\document.js:2134:9 at processTicksAndRejections (internal/process/task_queues.js:75:11) { 消息:"路径userId是必需的。 名称:"验证器错误", 属性:[对象], 种类:"必填", 路径:"用户 ID", 值:未定义, 原因:未定义, [符号(猫鼬:验证器错误)]:真 } }, _message:"产品验证失败", 名称:"验证错误" }

在此处输入图像描述

首先检查req.user是否不为空,然后使用

const products = new Product({
title: title,
description: description ,
price: price,
userId: mongoose.Types.ObjectId(req.user);
})

您需要使userIdobjectID

更改默认情况下text/plain. 的Content-Type属性,因此 MongoDB 不会验证您的请求。

Content-Type: text/plain; // Previous Value
Content-Type: application/json // Changed value

请在控制器/admin.js中查看此部分代码。

const products = new Product({
title: title,
description: description ,
price: price,
userId: req.user
})

您正在插入具有未定义或空值的用户标识。我认为 req.user 是未定义的,并且当您在模型中定义具有所需真约束的 userId 列的架构时:

userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
}

请在插入数据之前检查此日志

console.log(req.user);

最新更新