Не удалось найти свойство эталонной модели в Мангусте - PullRequest
0 голосов
/ 10 марта 2020

У меня есть две модели и два файла маршрутов. Но одно свойство внутри объекта ничего не возвращает.

// orders.js route
const mongoose = require('mongoose');

const Order = require('../models/order');

orderRouter.route('/')
.post((req, res, next) => {
  const order = new Order({
    _id: mongoose.Types.ObjectId(),
    quantity: req.body.quantity,
    product: req.body.productId
  });
  order
    .save()
    .then(result => {
      res.status(201).json(result);
    })
    .catch(err => {
      res.status(500).json({
        error: err
      });
    });
});

// order.js Model
const mongoose = require('mongoose');

const orderSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,
    // without required: true working but not returning anything
    product: { type: mongoose.Schema.Types.ObjectId, ref:'Product', required: true},
    quantity:{ type: Number, default:1 }

});

module.exports = mongoose.model('Order', orderSchema);  

// product.js model
const mongoose = require('mongoose');


const productSchema = mongoose.Schema({
    _id: mongoose.Schema.Types.ObjectId,    
    name: { type:String, required:true},
    price: { type: Number, required: true}
});


module.exports = mongoose.model('Product', productSchema);

// products.js route


const mongoose = require("mongoose");
const Product = require("../models/product");

productRouter
 .route("/")
  .get((req, res, next) => {
    Product.find()
      // SELECT SPECIFIC FIELDS TO DISPLAY
      .select('name price _id')
      .exec()
      .then(docs => {
        const response = {
          // To display item conts
          count: docs.length,
          // To display array of selected items
          products: docs.map(doc => {
            return {
              name: doc.name,
              price: doc.price,
              _id: doc._id,
              request: {
                type: 'GET',
                url: 'http://localhost:3000/products/' + doc._id
              }
            }
          })
        };
        res.status(200).json(response)
      })
      .catch(err => {
        res.status(500).json({
          error: err
        })
      })
  })
  
  .post((req, res, next) => {
    const product = new Product({
      _id: new mongoose.Types.ObjectId(),
      name: req.body.name,
      price: req.body.price
    });
    product
      .save()
      .then(result => {
        console.log(result);
        res.status(200).json({
          message: "Created Product successfully",
          createdProduct: {
            name: result.name,
            price: result.price,
            _id: result._id,
            request: {
              type: 'GET',
              url: 'http://localhost:3000/products/' + result._id
            }
          }
        });
      })
      .catch(err => {
        console.log(err);
        res.status(500).json({ error: err });
      });
  });

Если я вставлю обязательное значение: true в модель заказа, то получаю ошибку, подобную этой. Path product is required. name": "ValidatorError". Я не знаю, что я делаю здесь не так. Без проверок в модели. Я могу разместить и получить идентификатор, количество, но не повезло с продуктом.

1 Ответ

0 голосов
/ 07 апреля 2020

как выглядит ваш POST?

`POST http://localhost: 8000 / заказы Тип содержимого: application / json

{" productId " : "5e8b7ab88466300b9c720e68", "amount": "10"} `

В вашем запросе POST должны быть указаны" productId "и" amount ".

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