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);
}
これらは、オブジェクトに解析されるものではなく、「文字列」のように見えます。シリアル化されたデータを送信するコードが間違っているようです。しかし、そのコードはもちろん質問には含まれていません。 –
データを送信するコードを追加しました。 – koque
OrderSchemaでは 'delivery'を' DeliverySchema'の配列にすると宣言していますが、 '[DeliverySchema]'の代わりに 'DeliverySchema'でなければならないと感じています – Ananth