2017-07-21 18 views
0

次のjsonデータを永続化しようとしています。このデータは、データがないIDを持つMongoで作成されています。MongoDbのJSONデータをMongoDbに挿入できません

データ:モンゴにデータを挿入する

{ 
    "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}]" 
} 

マングースコード:モンゴで作成

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); 
    })  
}) 

結果:

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

マングースモデル:

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; 

角度コールデータを永続化するために:

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呼び出し:

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

これらは、オブジェクトに解析されるものではなく、「文字列」のように見えます。シリアル化されたデータを送信するコードが間違っているようです。しかし、そのコードはもちろん質問には含まれていません。 –

+0

データを送信するコードを追加しました。 – koque

+0

OrderSchemaでは 'delivery'を' DeliverySchema'の配列にすると宣言していますが、 '[DeliverySchema]'の代わりに 'DeliverySchema'でなければならないと感じています – Ananth

答えて

0

私が思うに、問題はJSON.stringifyであると思います。エクスプローラーで角度から取り除き、Content-type: 'application/json'またはJSON.parseとして送信してください。

関連する問題