2017-07-21 10 views
0

Ich versuche, die folgenden JSON-Daten zu erhalten, das Dokument wird in Mongo mit einer ID ohne die Daten erstellt.Kann JSON-Daten von Mongoose in MongoDb nicht einfügen

Daten:

{ 
    "delivery": "{\"firstName\":\"John\",\"lastName\":\"Public\",\"email\":\"[email protected]\",\"phone\":\"5555555555\",\"shippingAddress\":\"40 Beauman Plaza\",\"city\":\"Anchorage\",\"state\":\"AK\",\"zip\":\"55555\",\"deliveryDate\":\"2017-07-29T04:00:00.000Z\",\"deliveryInstruction\":\"Deliver it today\"}", 
    "payment": "{\"creditCardNo\":9898767876545432,\"creditCardYear\":\"2025\",\"creditCardMonth\":\"11\",\"cws\":\"111\",\"paymentType\":\"\"}", 
    "orderProduct": "[{\"productId\":\"5962a568734d1d256343a213\",\"quantity\":1},{\"productId\":\"596161e1734d1d25634366ce\",\"quantity\":1},{\"productId\":\"5962a545734d1d256343a20e\",\"quantity\":1},{\"productId\":\"5962a5ac734d1d256343a221\",\"quantity\":1}]" 
} 

Mongoose Codedaten in Mongo einzufügen:

router.post('/order/add', function(req, res) { 
    var order = req.body.order; 

    var newOrder = new Order({ 
    delivery: req.body.delivery, 
    payment: req.body.payment, 
    orderProduct: req.body.orderProduct   
    }); 
    newOrder.save(function(err) { 
    if(err) { 
     return res.status(500).json(err); 
    } 
    return res.status(200).json(newOrder); 
    })  
}) 

Ergebnis in Mongo erstellt:

{ 
    "_id": { 
     "$oid": "5971e49e777cab0f18456da9" 
    }, 
    "orderProduct": [], 
    "payment": [], 
    "delivery": [], 
    "__v": 0 
} 

Mongoose Modell:

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

var DeliverySchema = new Schema({ 
    firstName: String, 
    lastName: String, 
    email: String, 
    phone: String, 
    shippingAddress: String, 
    city: String, 
    state: String, 
    zip: String, 
    deliveryDate: Date, 
    deliveryInstruction: String}); 

var PaymentSchema = new Schema({ 
    creditCardNo: String, 
    creditCardYear: String, 
    creditCardMonth: String, 
    cws: String, 
    paymentType: String}) 

var OrderProductSchema = new Schema({ 
    productId: Number, 
    quantity: Number}); 

var OrderSchema = new Schema({ 
    delivery: DeliverySchema, 
    payment: PaymentSchema, 
    orderProduct: [OrderProductSchema]}); 

var Order = mongoose.model("Order", OrderSchema, "order"); 
module.exports = Order; 

Angular Rufdaten beharren:

placeOrder() { 
    let orderData = new Order(); 
    orderData.delivery = JSON.stringify(this.deliveryForm.getRawValue()); 
    orderData.payment = JSON.stringify(this.paymentForm.getRawValue()); 
    orderData.orderProduct = this.cartService.getOrderProduct(); 
    var order = JSON.stringify(orderData);  
    console.log(order); 
    this.checkoutService.placeOrder(order) 
} 

Http Aufruf:

placeOrder(order) { 
    this.http.post(this.orderUrl, {order: order}) 
    .toPromise() 
    .then(res => console.log('result = ' + res.json().data as string)) 
    // .map((res: Response) => res.json()) 
    // .catch(this.handleError); 
} 
+0

Diese sehen eher wie "Strings" aus als etwas, das zu einem Objekt geparst wird. Es sieht also so aus, als wäre der Code, der die serialisierten Daten sendet, falsch. Aber dieser Code ist natürlich nicht in der Frage enthalten. –

+0

Ich habe den Code hinzugefügt, der die Daten sendet. – koque

+0

In OrderSchema deklarieren Sie 'delivery' als ein Array von' DeliverySchema'. Ich denke, es sollte einfach 'DeliverySchema' anstelle von' [DeliverySchema] 'sein. – Ananth

Antwort

0

Ich denke, denke, das Problem in JSON.stringify ist. Versuchen Sie, es aus Winkel zu entfernen und senden Sie als Content-type: 'application/json' oder JSON.parse in Express-Controller.

Verwandte Themen