简体   繁体   English

猫鼬/nodejs中的验证错误

[英]ValidationError in mongoose/nodejs

When I want to add products to the database (MongoDB) .当我想将产品添加到数据库 (MongoDB) 时。 The program is in loop mode and does not crash, but it shows the error in the console.程序处于循环模式,不会崩溃,但会在控制台中显示错误。

Console content included on the bottom底部包含控制台内容

models/single-product.js模型/单一产品.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)

models/user.js模型/user.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)

controllers/admin.js控制器/admin.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:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\error\validation.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:\Alireza\web\Test project's\OnlineShop-Node.js\controllers\admin.js:25:17
at processTicksAndRejections (internal/process/task_queues.js:85:5) {

errors: { userId: MongooseError [ValidatorError]: Path userId is required.错误:{ userId:MongooseError [ValidatorError]:路径userId是必需的。 at new ValidatorError (D:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\error\validator.js:29:11) at validate (D:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\schematype.js:1034:13) at D:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\schematype.js:1088:11 at Array.forEach () at ObjectId.SchemaType.doValidate (D:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\schematype.js:1043:14) at D:\Alireza\web\Test project's\OnlineShop-Node.js\node_modules\mongoose\lib\document.js:2134:9 at processTicksAndRejections (internal/process/task_queues.js:75:11) { message: 'Path userId is required.', name: 'ValidatorError', properties: [Object], kind: 'required', path: 'userId', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true } }, _message: 'Product validation failed', name: 'ValidationError' }在新的 ValidatorError (D:\Alireza\web\Test 项目的\OnlineShop-Node.js\node_modules\mongoose\lib\error\validator.js:29:11) 在验证 (D:\Alireza\web\Test 项目的\OnlineShop -Node.js\node_modules\mongoose\lib\schematype.js:1034:13) 在 D:\Alireza\web\Test 项目的\OnlineShop-Node.js\node_modules\mongoose\lib\schematype.js:1088:11 在Array.forEach () 在 ObjectId.SchemaType.doValidate (D:\Alireza\web\Test 项目的\OnlineShop-Node.js\node_modules\mongoose\lib\schematype.js:1043:14) 在 D:\Alireza\web\测试项目的\OnlineShop-Node.js\node_modules\mongoose\lib\document.js:2134:9 at processTicksAndRejections (internal/process/task_queues.js:75:11) { message: 'Path userId is required.', name: 'ValidatorError',属性:[Object],种类:'required',路径:'userId',值:未定义,原因:未定义,[Symbol(mongoose:validatorError)]:true } },_message:'产品验证失败' ,名称:'验证错误'}

enter image description here在此处输入图像描述

Please check This Section of Code in controllers/admin.js. 请检查controllers / admin.js中的本节代码。

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

you are inserting the userId with an undefined or null value. 您要插入带有未定义或null值的userId。 I think req.user is undefined and as you defined the schema of userId column with required true constraints in you model: 我认为req.user是未定义的,并且您在模型中定义了具有必需的真正约束的userId列的架构时

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

Please check this log before inserting the data 请在插入数据之前检查此日志

console.log(req.user);

First check if req.user is not null, then save product using 首先检查req.user是否不为null,然后使用保存产品

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

you need to make userId as objectID 您需要将userId作为objectID

Change the Content-Type property which by default is text/plain.更改默认为 text/plain 的 Content-Type 属性。 because of this text/plain mongodb doesn't validate your request.因为这个 text/plain mongodb 不会验证您的请求。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM