Express mongodb найти результаты запроса пустой массив - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь выполнить вызов API на моем express сервере, чтобы выбрать сотрудников, которые работают в одном и том же месте, на основе идентификатора местоположения. Однако вызов API возвращает только пустой массив, пока он работает в интерфейсе командной строки.

Модель сотрудника

module.exports = mongoose => {
  var schema = mongoose.Schema(
    {
      first_name: String,
      last_name: String,
      address: {
        housenumber: Number,
        street: String,
        city: String,
        zip: Number,
        country: String
      },
      phone: Number,
      mobile: Number,
      email: String,
      enrollment_date: Date,
      staff_id: Number,
      location: { type : mongoose.Schema.ObjectId, ref : 'location' },
      department: String,
      function: String, 
      active: Boolean
    },
    { timestamps: true }
  );

  schema.method("toJSON", function() {
    const { __v, _id, ...object } = this.toObject();
    object.id = _id;
    return object;
  });

  const Employee = mongoose.model("employee", schema);
  return Employee;
};

Маршрутизация сотрудника для API

  router.get("/location/:location_id", employees.findAllByLocation);

Сотрудник обработка контроллера над вызовом

exports.findAllByLocation = (req, res) => {
  Employee.find({ location: req.params.location_id })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while retrieving Employees."
      });
    });
};

Фиктивные данные базы данных для проверки на

Dummy database data to test on

Результат вызова API почтальона

Postman API call result

Однако попытка найти пользователя с этим идентификатором местоположения в интерфейсе командной строки работает и дает желаемый результат.

[Powershell output[3]

Так что как-то все испортилось, и я не могу понять, почему он это делает. Я провел некоторое исследование и обнаружил, что это может быть связано с тем, что местоположение является ссылкой в ​​качестве ObjectId. Поэтому я попытался обернуть req.params.location_id в ObjectId, но это может исправить это, но это не сработало.

Какой лучший способ заставить это работать?

1 Ответ

1 голос
/ 10 апреля 2020

Чтобы использовать цепочку обещаний, вы должны что-то вернуть, а затем возвращаемое значение будет передано в цепочке «then ()» как данные. В вашем примере вы должны

      return Employee.find({location:req.params.location_id})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...