2016-08-25 9 views
0

ちょっと、私のAPIでデータを取得するのに問題があります。私のモデルでは のものがあります。受信した製品のリスト、私はAPIをテストしていると私は私のルータ上のロジックでいくつかのエラーを取得している、私はポストを介してアイテムを送信している、すべて同じキーが異なる値で、私はそれらを必要とする方法しかし、私は配列にそれらを取得しようとするとき、または私がエラーを与える1つを取得しようとするとき。私はすべての項目のリストを持っていると思いますので、私は所得のスキーマをこのように作ることを選択し値がリスト/配列の場合、エクスプレスルータから値を取得する

var itemsIncomeSchema = new Schema({ 
    user: {type: schemaTypes.ObjectId, ref: 'User'}, 
    sender: String, 
    created_at: {type: Date, default: Date.now()}, 
    items: [Item] 
}) mongoose.model('ItemIncome', itemsIncomeSchema); 

:収益モデルここ

var itemSchema = = new mongoose.Schema({ 
    name: String, 
    details: String, 
    quantity: SchemaTypes.Double, 
    created_at: {type: Date, default: Date.now}, 
    last_updated: {type: Date, default: Date.now} 
}) mongoose.model('Item', itemSchema); 

ます:ここ

は、アイテムのモデルですしかし、私はrefを使用することを望んでいないので、入るもののレジストリを持っていたい。 (多くの多くのようなもの)

私はAPIを通じてモデルをテストしていたときに、とにかく問題はここにある、私はポストで、このような値を送信しています:

sender=sender_name&items=57b694c626a4741c2f4bf6fd&items=57b694c626a4741c2f4bffff ... 

とポストに私のルータのメソッド私は完全にデータを取得している、それもコンソール上に印刷されますが、私はどのように項目を配列を作るか、またはアイテムからデータを取得する方法がわからない_idの私は、もし私が_idだけを渡すか、私はアイテム全体を渡すかどうかわからないので、私はそれらを正しく送信しているかわからない。ここ

はポストです:

.post(function(req, res){ 
var entry = new itemEntry(); 
var user = req.user; 
//var items= req.body.items; <<tried like this but no success 
console.log('items: '+req.body.items) 
for (var item in req.body.items) { 
    console.log('item: '+item); //it prints item: 0...23 also tried with a toString 
} 
entry.user = user._id; 
entry.items= items; 
entry.save(function(err, entry){ 
    if(err) 
    return res.send(500, err); 
    return res.json(entry); 
}); 
}) 
+0

あなたのクエリに 'items'がありますが、' req.body.products'の作業中ですか?あなたのデータがどのように送られているかは不明です。あなたが得るものを見るために 'console.log(req.body)'を試してみてください。 – cyberwombat

+0

申し訳ありませんタイプミス、それは戻ってきています "アイテム:['57b694c626a4741c2f4bf6fd'、 '57b694c626a4741c2f4bf6ff']}"私は – Driff

答えて

0

ItemEntryは何ですか?それはItemIncomeであると思いますか?その場合、アイテムのモデルを参照するために、あなたのスキーマを変更します。

items: [{type: schemaTypes.ObjectId, ref: 'Item'}] 

次に、あなたのコード内で:

entry.items = req.body.items; 

更新:をあなたのコメントに基づいて、私はあなたのスキーマが少し作業が必要だと思います。まず、同じIDを持つ新しいItemを作成することはできませんが、これは機能しません。あなたの意図は、既存のアイテムを参照することですが、量を変化させている場合しかし、その後、あなたは項目の一部として数量フィールドを持っていないためにあなたのスキーマを調整する代わりにItemIncomeの一環として:

var itemSchema = = new mongoose.Schema({ 
    name: String, 
    details: String, 
    created_at: {type: Date, default: Date.now}, 
    last_updated: {type: Date, default: Date.now} 
}) mongoose.model('Item', itemSchema); 
Here's the income model: 

var itemsIncomeSchema = new Schema({ 
    user: {type: schemaTypes.ObjectId, ref: 'User'}, 
    sender: String, 
    created_at: {type: Date, default: Date.now()}, 
    items: [{ 
    quantity: quantity: SchemaTypes.Double, 
    item: {type: schemaTypes.ObjectId, ref: 'Item'} 
    }] 
}) mongoose.model('ItemIncome', itemsIncomeSchema); 

あなたの供給されたデータは次のようになります:次に

items=57b694c626a4741c2f4bf6fd&items=57b694c626a4741c2f4bf6‌​ff&quantity=100&quan‌​tity=20" and now i'm recieving this " { items: [ '57b694c626a4741c2f4bf6fd', '57b694c626a4741c2f4bf6ff' ], quantity: [ '100', '20' ] } 

:あなたができる場合

var items = [] 
for(var i = req.body.items.length - 1; i >= 0; i --) { 
    items.push({ quantity: req.body.quantity[i], item: req.body.items[i] }) 
} 
entry.items = items 

私は、JSONオブジェクトとしてデータを渡すことをお勧めします。

postdata: { 
    items: [{ 
    id: '57b694c626a4741c2f4bf6fd', 
    quantity: 100 
    }, { ... }] 
} 

をExpressはreq.bodyフィールド内のオブジェクトとして利用できるようになります:あなたはあなたが今やっているよう量とアイテムID一緒ではなく、2つの別々の配列を渡すことができますように、それは潜在的に、より堅牢になります。

新しいアイテムを作成する必要がある場合は、最初に各アイテムを作成して保存し、IDを取得してからそれらを割り当てる必要があります。このためにasyncライブラリを使用して、約束を助けるか使用することができます。

+0

ええ、itemEntryですが、それはちょうどアイテムスキーマ?アイテムスキーマには値がありますか?新しいアイテムのようにアイテムを保存したいのですが、同じIDとitemIncomeの数量が異なる場合はどうなりますか?私は参照とそれを行うのですか?私が理解しているのは、itemSchemaの項目を参照するということです。 – Driff

+0

返事をありがとう、私はあなたの推薦でテストするつもりです、私はこれまでこれについてやっていると思っていましたが、配列ではなく、参照ではなく、私はそれが正しいアプローチ(私は上記の方法を渡すかどうかわからないので、私は配列のデータを追加するエラーを私に与えていたので、アイテムを保存していませんでした)しかし私は他の方法を知らない。 – Driff

+0

アイテムや参照を保存するかどうかは、実際の設定によって異なります。一般的に、データの複製は避けたいと考えています。請求書の各アイテムが本当にユニークである場合、請求書モデルにアイテムを作成しますが、他の請求書が共有するものと関連する場合は、参照がより適切になる場合があります。私のアップデートで示したセットアップを持つことは、カスタム数量を持つ製品への参照を持つ注文を持つ電子商取引の典型的な設定になります。 – cyberwombat

関連する問題