2017-01-27 1 views
0

Пожалуйста, взгляните на мой код. У меня ошибка проверки, но я совершенно уверен, что я разместил свои документы в правильном формате.Ошибка проверки Mongoose, но я правильно поставил документы

МОЯ МОДЕЛЬ

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var orderSchema = new Schema({ 
    userPurchased: { type: Schema.Types.ObjectId, ref: 'users' }, 
    products: [ 
     { 
      product: { type: Schema.Types.ObjectId, ref: 'products' }, 
      size: { type: String, required: true }, 
      quantity: { type: Number, required: true }, 
      subTotal: { type: Number, required: true } 
     } 
    ], 
    totalQuantity: { type: Number }, 
    totalPrice: { type: Number }, 
    otherShipAd: { type: String }, 
    modeOfPayment: { type: String }, 
    paidStatus: {type: Boolean, default: false} 
}); 

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

МОЙ ROUTE

ordersRouter.route('/placeOrder') 
     .post(function (req, res) { 
      var body = req.body; 
      console.log(req.body); 
      var orderItem = { 
       userPurchased: body.userId, 
       products: [{ 
        product: body._id, 
        size: body.size, 
        quantity: body.quantity, 
        subTotal: body.subTotal 
       }], 
       totalQuantity: body.totalQuantity, 
       totalPrice: body.totalPrice, 
       otherShipAd: body.customAdd, 
       modeOfPayment: body.modeOfPayment 
      }; 
      Orders.create(orderItem, function (err, result) { 
       if (err) throw err; 
      }); 
     }); 

МОЯ JSON объект из POSTMAN

{ 
    "userPurchased": "5887f303c58a953360fe2759", 
    "products": [{ 
     "product": "58466e8e734d1d2b0ceeae00", 
     "size": "m", 
     "quantity": 3, 
     "subTotal": 1197 
    }, 
    { 
     "product": "58466e8e734d1d2b0ceeae00", 
     "size": "l", 
     "quantity": 3, 
     "subTotal": 1197 
    }], 
    "totalQuantity": 6, 
    "totalPrice": 2394, 
    "otherShipAd": "", 
    "modeOfPayment": "BDO" 
} 

Пожалуйста, смотрите мой стек ошибок трассировки enter image description here

EDIT: Результат req.body enter image description here

Что я делаю неправильно здесь? Я застрял.

+0

что вы отправляете в ПОЧТУ? Скажите мне rsult из 'console.log (req.body)'. –

+0

отредактировал мой вопрос, чтобы показать результат запроса тела –

+0

, как вы импортируете заказ? Вы храните их в var Order или var order. Смотрите, что вы использовали «Orders.create». – rresol

ответ

1

Вы ошибаетесь при создании нового order. Посмотрите на contentsreq.body и посмотрите, что вы переезжаете на объект orders.

Попробуйте это:

var orderItem = new Orders(); 
orderItem.userPurchased=body.userId; 
//for each products item, push it to orderItem.products 
body.products.forEach(function(product,index) 
{ 
    orderItem.products.push({ 
     product: product.product, 
     size: product.size, 
     quantity: product.quantity, 
     subTotal: product.subTotal 
    }); 
}); 
orderItem.totalQuantity=body.totalQuantity; 
orderItem.totalPrice=body.totalPrice; 
orderItem.otherShipAd=body.customAdd; 
orderItem.modeOfPayment=body.modeOfPayment; 

Orders.save(function (err, result) { 
    if (err) throw err; 
}); 
+0

Я уже знаю, что моя проблема толкает массив элементов из моего req.body в varialble. Это то, что я ищу. Кстати, в чем смысл индексатора в forEach? –

+0

Это необязательно, здесь вы можете опустить индекс. просто 'forEach (function (product) {})' будет работать. –

+0

Примите ответ и отпустите его, если это поможет вам решить вашу проблему. –

1

Вы, кажется, задал тот же вопрос о массиве в отдельном посте - вы должны избегать дублирования ваши вопросы.

Ответ короче -> вам не нужно обрабатывать ваш req.body, поскольку он соответствует требуемой схеме вашей модели. Это должно работать нормально:

ordersRouter.route('/placeOrder') 
    .post(function (req, res) { 

     Orders.create(req.body, function (err, result) { 
      if (err) throw err; 

      // send success message back 
     }); 
    }); 
+0

извините. Я думаю, что мой вопрос здесь в том, почему у меня ошибка проверки, а на втором - процесс обработки массива объектов в req.body. Если это будет дубликат, то это моя вина. Кстати, спасибо за это. Не думал, что это тоже можно сделать. Я попробую это и дам вам знать. –

+0

проверял его, и он работает. Я поднимусь. –