Как разместить и заполнить счет - PullRequest
0 голосов
/ 20 октября 2019

У меня есть реляционный json, называемый "клиент" внутри модели Билла. Это мой код:

    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',required: true},


detail: [{
    quantity: Number,

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

 });

  mongoose.model('bills', billSchema);

Это мой почтовый маршрут

app.post('/api/bills', async (req, res) => {

const { number, type, local, client, detail, total} = req.body;

   await Client.findById(req.body.client._id)
.then(client => {
  if (!client) {
    return res.status(404).json({
      message: "client not found"
    });
  }});
const bill = new Bill({
  number,
  date: new Date(),
  type,
  local,
  client,
  detail,
  total

})

try {
  let newBill = await bill.save();

  res.status(201).send(newBill); 
} catch (err) {
  if (err.name === 'MongoError') {
    res.status(409).send(err.message);
  }

  res.status(500).send(err);
}
  });

 my get route

 app.get('/api/bills',function(req,res){
    Bill.find({}, function(err, bills) {
        Client.populate(bills, {path: "clients"},function(err, bills){
            res.status(200).send(bills);
        }); 
    });
    });

Я хочу что-то вроде этого:

     {"number": 302,

     "type": "c",

"local": "porstmouth",

"client":   {
    "address": {
        "street": "victoria street",
        "number": 1001,
        "floor": "2",
        "flat": 4
    },
    "_id": "5dab929613fb682b48e4ca6b",
    "name": "luke skywalker",
    "mail": "l.skywalker@yahoo.com",
    "cuil": "39193219",
    "phone": 128391,
    "__v": 0
},


"detail": [{
    "quantity": 500,

    "product": {"code": 300,
               "name": "P2",
               "price": 800
    },
    "undertotal": 5000
}
],
"total": 11000

}

Но я вижу такой результат:

 {
     "date": "2019-10-20T12:27:17.162Z",
     "_id": "5dac52a577e09b4acc45718d",
     "number": 302,
     "type": "c",
     "local": "porstmouth ",
     "client": "5dab929613fb682b48e4ca6b",
     "detail": [
         {
            "_id": "5dac52a577e09b4acc45718e",
            "quantity": 500,
            "product": {
            "code": 300,
            "name": "P2",
            "price": 800
            },
            "undertotal": 5000
              }
              ],
             "total": 11000,
            "__v": 0
                 }

Я не хочу видеть только ID клиента. Я хочу видеть весь контент от клиента внутри счета. Я пытался сделать с методом заполнения, но у меня нет результатов.

Итак, что такое форма для публикации и заполнения вложенного реляционного объекта json в этом случае?

1 Ответ

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

Пока достаточно опубликовать только clientId.

Таким образом, ваш почтовый маршрут может быть таким (вы оба использовали await и затем, что неверно, поэтому я реорганизовал его для использования только await)

app.post('/api/bills', async (req, res) => {

  const { number, type, local, client, detail, total } = req.body;

  let existingClient = await Client.findById(req.body.client._id)

  if (!existingClient) {
    return res.status(404).json({
      message: "client not found"
    });
  }

  const bill = new Bill({
    number,
    date: new Date(),
    type,
    local,
    client: req.body.client._id
    detail,
    total

  })

  try {
    let newBill = await bill.save();

    res.status(201).send(newBill);
  } catch (err) {
    if (err.name === 'MongoError') {
      res.status(409).send(err.message);
    }

    res.status(500).send(err);
  }
});

И в маршруте get, чтобы получить всю информацию о клиенте, вам нужно заполнить ее следующим образом:

app.get('/api/bills', async (req, res) => {

  try {
    const bills = await Bill.find({}).populate("clients");

    res.status(200).send(bills);
  } catch (err) {
    console.log(err);
    res.status(500).send(err);
  }
}
)

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