Node.js Ошибка проверки RESTful API на схеме массива - PullRequest
0 голосов
/ 18 сентября 2018


Я создаю RESTful API с использованием Node.js и mongoose, следуя указаниям Acedemind .У меня все работает нормально, и теперь я расширяю его, чтобы позволить клиенту размещать несколько продуктов в одном и том же порядке.По сути, я модифицирую простой запрос POST, чтобы он представлял собой массив, а не некоторые переменные.Моя проблема в том, что я сталкиваюсь с длинной ошибкой проверки, которая препятствует созданию массива.Вот код запроса на отправку:

    router.post("/", async (req, res, next) => {

      const productsMaybeFalses = await Promise.all(req.body.products.map(async ({ productId })=> {
        const product = await Product.findById(productId);
    if (!product) {
      return false;
    }

    return {
      ...product,
      productId,
    }
  }));

  const errors = productsMaybeFalses
    .map((productMaybeFalse, index) => {
      return {
        productMaybeFalse, index
      }
    })
    .filter(({ productMaybeFalse }) => !productMaybeFalse)

  if (errors.length) {
    console.log(error);
    return;
  }

  console.log(productsMaybeFalses);

  const products = productsMaybeFalses
    .filter((productMaybeFalse) => productMaybeFalse);


  const order = new Order({
    _id: mongoose.Types.ObjectId(),
    products: products
  });

  return order.save().then(results => {
    console.log(results);
    res.status(201).json(results.map((result) => ({
      message: "order stored",
      createdOrder: {
        _id: result._id
        },
        request: {
          type: "GET",
          url: "http://localhost:3000/orders/" + result._id
        }
    })));
  })

  .catch(err => {
    console.log(err);
    res.status(500).json({
      error: err
    })
  })
})

А вот схема заказа:

    const mongoose = require("mongoose");

const pSchema = mongoose.Schema({
  productId: { type: mongoose.Schema.Types.ObjectId, ref: "Product", required: true},
  quantity: { type: Number, default: 1}
});

const orderSchema = mongoose.Schema({
  _id: mongoose.Schema.Types.ObjectId,
  products: [pSchema]
});

module.exports = mongoose.model("Order", orderSchema)

Чтобы этот вопрос не был слишком длинным, я опубликую только конецчасть ошибки.Часть, которую я чувствую, рассказывает больше всего о проблеме.Если кто-то хочет, чтобы сообщение об ошибке целиком и лучше понимало проблему и, возможно, придумало решение для меня, я также буду очень рад опубликовать его.Вот оно:

kind: 'Array',
        value: [Array],
        path: 'products',
        reason: TypeError: value[i].toObject is not a function
    at DocumentArray.cast (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/schema/documentarray.js:309:27)
    at DocumentArray.SchemaType.applySetters (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/schematype.js:755:12)
    at model.$set (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/document.js:922:18)
    at model._handleIndex (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/document.js:740:14)
    at model.$set (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/document.js:697:22)
    at model.Document (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/document.js:114:12)
    at model.Model (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/model.js:73:12)
    at new model (/Users/axelhagman/Documents/Jacobs/node_modules/mongoose/lib/model.js:4324:13)
    at router.post (/Users/axelhagman/Documents/Jacobs/api/routes/orders.js:70:17)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:189:7) } },
  _message: 'Order validation failed',
  name: 'ValidationError' }
POST /orders/ 500 440.085 ms - 7622

Я очень новичок в использовании node.js и создании API в целом, поэтому любая помощь будет очень признательна.Спасибо!

...