更新Product对象时触发Mongoose ValidationError致服务崩溃
问题描述
更新Product对象时触发ValidationError,提示portada和slug为必填字段,服务崩溃。已提供错误信息和Product模型代码,请问还需提供哪些代码来排查解决?
错误信息
C:\compra-express\back\node_modules\mongoose\lib\document.js:2782 this.$__.validationError = new ValidationError(this); ^ ValidationError: producto validation failed: portada: Path `portada` is required., slug: Path `slug` is required. at Document.invalidate (C:\compra-express\back\node_modules\mongoose\lib\document.js:2782:32) at C:\compra-express\back\node_modules\mongoose\lib\document.js:2574:17 at C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1273:9 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { errors: { portada: ValidatorError: Path `portada` is required. at validate (C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1270:13) at C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1253:7 at Array.forEach (<anonymous>) at SchemaType.doValidate (C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1198:14) at C:\compra-express\back\node_modules\mongoose\lib\document.js:2567:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: { validator: [Function (anonymous)], message: 'Path `portada` is required.', type: 'required', path: 'portada', value: undefined }, kind: 'required', path: 'portada', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true }, slug: ValidatorError: Path `slug` is required. at validate (C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1270:13) at C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1253:7 at Array.forEach (<anonymous>) at SchemaType.doValidate (C:\compra-express\back\node_modules\mongoose\lib\schematype.js:1198:14) at C:\compra-express\back\node_modules\mongoose\lib\document.js:2567:18 at process.processTicksAndRejections (node:internal/process/task_queues:77:11) { properties: { validator: [Function (anonymous)], message: 'Path `slug` is required.', type: 'required', path: 'slug', value: undefined }, kind: 'required', path: 'slug', value: undefined, reason: undefined, [Symbol(mongoose:validatorError)]: true } }, _message: 'producto validation failed' } Node.js v18.16.0 [nodemon] app crashed - waiting for file changes before starting...
Product模型代码
'use strict' var mongoose = require('mongoose'); //variable per a mongoose var Schema = mongoose.Schema; //inicialitza l'esquema de mongoose //--MODEL DE PRODUCTO--// var ProductoSchema = Schema({ //Variable per a que desi tot Schema | Conté tots els camps de la col·lecció titulo: {type: String, required: true}, //Assignem el tipus de dada i fem que sigui un camp requerit/obligatori slug: {type: String, required: true}, galeria: [{type: Object, required: false}], //Array portada: {type: String, required: true}, precio: {type: Number, required: true}, descripcion: {type: String, required: true}, contenido: {type: String, required: true}, stock: {type: Number, required: true}, nventas: {type: Number, default: 0, required: true}, npuntos: {type: Number, default: 0, required: true}, categoria: {type: String, required: true}, estado: {type:String, default: 'Edicion', required: true}, createdAt: {type: Date, default: Date.now, require: true} }); //Exportem el model module.exports = mongoose.model('producto', ProductoSchema); //Rep el nom d'aquest schema i el nostre Schema
需补充的排查代码
- 更新Product的核心逻辑代码:即触发更新操作的具体实现,比如使用
findByIdAndUpdate、updateOne或实例save方法的代码,确认更新时是否遗漏portada和slug字段,或是否将其设为undefined。 - 接口请求处理代码:如果是接口触发的更新,提供对应的路由处理函数,查看前端传入的参数是否包含
portada和slug,或参数解析时是否丢失字段。 - Mongoose钩子/中间件代码:如果Product模型有
pre('save')、pre('findOneAndUpdate')等钩子函数,提供这些代码,确认是否在钩子中意外清空了portada或slug的值。 - 错误处理逻辑代码:当前服务因未捕获ValidationError崩溃,补充现有的错误处理代码,排查是否存在未处理的Promise拒绝或未捕获异常。
内容的提问来源于stack exchange,提问作者JoGaPaPo
相关产品推荐
相关产品推荐

