Как найти клиента по счетам по идентификатору - PullRequest
0 голосов
/ 23 октября 2019

Мне нужно найти клиента по счетам по идентификатору клиента, но он показывает мне ошибку.

Я пытался получить идентификатор клиента с помощью функции "findById"

это клиентсхема:

    const mongoose = require('mongoose');
    const { Schema } = mongoose;

    const clientSchema = new Schema({

    name: String,
    mail: String,
    cuil: String,
    phone: Number,
    address: {street: String,
    number: Number,
    floor: String,
    flat: Number
    }    
    });

    mongoose.model('clients', clientSchema);

Схема счета:

    const mongoose = require('mongoose');
    const { Schema } = mongoose;

    const billSchema = new Schema({

    number: Number,

    date: {type: Date, default: Date.now()},

    type: String,

    local: String,

    client: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'clients'
    },

    detail: [{
        quantity Number,

        product: {code: Number,
                   number: String,
                   price: Number
        },
        undertotal: Number
    }
    ],
    total: Number

    });

    mongoose.model('bills', billSchema);

И наконец, мой маршрут получения

     app.get('/api/bills/client/:id', (req, res) => {
        console.info('Obtaining bill's client');
        try{
          const id = req.body.client._id;
        const client = Bill.findById(id)
        .populate("client","address name mail cuil phone -_id");

        if (client) {
          res.send(client);
      } else {
          res.status(404).send({ message: `Client '${id}' couldn't be found. ` 
    });
      }
      } catch (err) {
    console.log(err);
      res.status(500).send({ message: `Internal server error.\n\n${err}` });
      }

          });      

Я ожидал, показывает мне клиента из счета. Вывод показывает мне "Внутренняя ошибка сервера". Как я могу решить эту ошибку?

Лучше использовать функцию "найти" вместо "findById"?

Ответы [ 2 ]

0 голосов
/ 23 октября 2019

Вы пытаетесь передать clientId через req.body или внутри параметра маршрута?

Я думаю, он должен быть указан в параметре маршрута, поскольку вы уже ожидали его в URL-адресе, подобном этому "/ api / bills /client /: id "

Примечание: findOne (или findById) возвращает обещание, поэтому вам нужно использовать await (или затем блокировать))

app.get("/api/bills/client/:id", async (req, res) => {
  console.info("Obtaining bills client");
  try {
    const id = req.params.id; //   req.body.client._id;
    const client = await Bill.findOne({ client: id }).populate(
      "client",
      "address name mail cuil phone -_id"
    );

    if (client) {
      res.send(client);
    } else {
      res.status(404).send({ message: `Client '${id}' couldn't be found. ` });
    }
  } catch (err) {
    console.log(err);
    res.status(500).send({ message: `Internal server error.\n\n${err}` });
  }
});


0 голосов
/ 23 октября 2019

Вы находите идентификатор счета, затем, как вы будете получать данные, попробуйте следующее:

    const id = req.body.client._id;
    const client = Bill.findOne({client:id})
    .populate("client","address name mail cuil phone -_id"); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...