Estoy tratando de validar el campo gamesPlayed
de PlayerSchema
en función del valor de gamesWon
y viceversa. El valor de gamesPlayed
siempre debe ser mayor o igual al valor de gamesWon
.
Aquí está el fragmento de código que estoy usando para la validación.
validate: { validator: (value) => { return value >= this.gamesWon; }, message: (props) => `gamesPlayed can't be less than gamesWon, invalid value: ${props.value}` }
Al hacerlo, sin importar lo que pase en el cuerpo de la solicitud, obtengo el error de validación anterior. Después de trabajar un poco, me di cuenta de que estoy obteniendo un objeto vacío como el valor de this
. Así que probé un enfoque diferente para validar el campo gamesWon
.
PlayerSchema.path('gamesWon').validate((value)=>{ return value <= this.gamesPlayed; })
Después de hacerlo, sigo obteniendo el objeto vacío como valor de this
.
Aquí está el código de mi archivo models.js
const mongoose = require('mongoose'); const PlayerSchema = new mongoose.Schema({ _id: Number, name: { type: String, required: true, }, gamesWon : { type: Number, min: 0, required: true, }, gamesPlayed : { type: Number, min: 0, required: true, validate: { validator: (value) => { return value >= this.gamesWon; }, message: (props) => `gamesPlayed can't be less than gamesWon, invalid value: ${props.value}` } }, }) PlayerSchema.path('gamesWon').validate((value)=>{ return value <= this.gamesPlayed; }) const Player = mongoose.model("Player",PlayerSchema); module.exports = Player
Estoy pasando debajo de json como el cuerpo de la solicitud a través del cartero para el punto final POST
{ "_id": 1, "name": "ClassHacker", "gamesWon": 5, "gamesPlayed": 7 }
Por lo que sé, podemos usar this
validación interna, pero en mi caso, no creo que funcione en absoluto o puede ser que esté haciendo algo mal y, si ese es el caso, hágame saber qué estoy haciendo mal y ¿Cómo debo validar estos campos?