You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

更新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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:50:23