Проверка для findOneAndUpdate не имеет доступа к значениям "this" - PullRequest
0 голосов
/ 16 мая 2018

У меня есть конечная точка 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, когда проверка не проходит.Это любопытно.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...