У меня есть конечная точка Express, которая выполняет следующие действия:
router.put('/:appointmentId', async (req, res) => {
try {
let appointment = await Appointment.findOneAndUpdate(
{ _id: req.params.appointmentId },
{
member_id: req.body.appointment.memberId,
client_id: req.body.appointment.clientId,
address_id: req.body.appointment.addressId,
unit_id: req.body.appointment.unitId,
dateAndTime: req.body.appointment.dateAndTime
},
{
new: true,
runValidators: true,
context: 'query'
}
);
res.send(appointment);
} catch (err) {
res.send(err);
}
});
Назначение - это модель Mongoose.Эта модель имеет одну из следующих проверок пути:
AppointmentSchema.path("unit_id").validate(async function (unit_id) {
let unit = await Unit.findById(unit_id);
if ((unit === null) || !unit.address_id.equals(this.address_id)) {
return false;
}
return true;
}, "unit_id is not valid");
Схема назначения выглядит следующим образом:
var AppointmentSchema = new mongoose.Schema(
{
member_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Member',
required: true
},
client_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Client',
required: true
},
address_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Address',
required: true
},
unit_id: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Unit',
required: true
},
dateAndTime: {
type: Date,
required: true
}
}
);
Когда я нажимаю на конечную точку Express, this.address_id
не определена, и мои проверкине работает должным образом.Насколько я понимаю, если бы я установил runValidators
на true
и context
на 'query'
, у меня был бы такой доступ.
Что я делаю не так?
В качестве примечания я также заметил, что Express возвращает состояние 200
, когда проверка не проходит.Это любопытно.
Спасибо.