2016-08-25 4 views
0

안녕하세요, API에 데이터를 가져 오는 데 문제가 있습니다. 여기에있는 항목은 입니다. 항목 배열을 저장하려고합니다. 들어오는 제품의 목록, 그래서 API를 테스트하고있어 내 라우터의 논리와 몇 가지 오류가있어, 내가 게시물을 통해 항목을 보내고, 모두 같은 키지만, 다른 가치와 함께, 콘솔은 그것을 인쇄합니다 방법이 필요하지만 배열에 넣으려고 할 때 또는 심지어 하나를 얻으려고하면 오류가 발생합니다. 내가 모든 항목의 목록을 갖고 싶어하기 때문에 나는 소득 스키마이 방법을 선택값이 목록/배열 인 경우 익스프레스 라우터에서 값 검색

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

것 : 여기

이 항목에 대한 모델의 하지만 나는 내가 심판을 사용하고 싶지 않았어 들어오는 것들의 레지스트리를 갖고 싶습니다. (많은 많은 같은)

어쨌든 문제는 여기에 내가 API를 통해 모델을 테스트있을 때, 나는이 게시물에 같은 값을 보내고있다 :

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

을하고 게시물에 방법을 내 라우터에 내가 완벽하게 데이터를 받고 있어요, 심지어 콘솔에 인쇄하지만 항목을 배열 또는 항목에서 데이터를 검색하는 방법을 잘 모르겠다 왜냐하면 나는 _id의 내가 보내는거야 봐야하기 때문에 확실하지 않으면 나는 그들을 제대로 보내고 있는지 모르겠다. 나는 단지 _id를 건네지 않을지, 아니면 전체 아이템을 전달할 것인가. ItemEntry 무엇

.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

죄송합니다. 오타가 있습니다.이 항목은 {{items : [ '57b694c626a4741c2f4bf6fd', '57b694c626a4741c2f4bf6ff']}을 반환합니다. 보내시는 ID는 – Driff

답변

0

입니다 : 여기

는 포스트입니까? ItemIncome일까요? 코드에서 다음

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

:이 경우 항목의 모델을 참조 할 스키마를 변경

entry.items = req.body.items; 

업데이트 :는 귀하의 의견을 바탕으로 내가 스키마가 약간의 작업을 필요로 생각합니다. 먼저 동일한 ID로 새 항목을 만들 수는 없으며 작동하지 않습니다. 하지만 당신의 의도는 기존 항목 참조하지만이 항목의 일부 수량 필드가없는 당신의 스키마를 조정하려면 대신 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 
    }, { ... }] 
} 

익스프레스는 req.body 분야의 객체로서 사용할 수있을 것이다 : 당신이 지금하고있는 당신이 함께가 아닌 2 개 개의 분리 배열을 수량과 항목 ID를 전달할 수 있습니다 그것은 잠재적으로 더 강력한 될 것입니다.

새 항목을 만들어야하는 경우 먼저 각 항목을 만들고 저장하고 ID를 가져온 다음 해당 항목을 할당해야합니다. 이 경우 async 라이브러리를 사용하여 Promises를 사용하거나 사용할 수 있습니다.

+0

입니다. itemEntry는 ItemIncome이지만 괜찮습니까? 아이템 스키마? 아이템 스키마에는 값이 있습니까? 그리고 만약 내가 새 항목처럼 항목을 저장하고 싶지만 item과 동일한 id와 다른 양을 가지고 있다면? 나는 심판과 함께 그것을합니까? 왜냐하면 내가 이해할 수있는 것은 itemSchema의 항목을 참조 할 것이기 때문입니다. – Driff

+0

답장을 보내 주셔서 감사합니다. 저는 이전에이 방법을 사용하는 것에 대해 생각해 보았습니다.하지만 어딘가에서 항목을 저장할 수 있다고 생각했습니다. 배열이 아닌 참조하지만, 나는 이것이 올바른 접근 방식인지 확실하지 않기 때문에 나는 배열의 데이터를 추가하는 에러를 내고 있기 때문에 아이템을 저장하지 못했다.) 그러나 나는 다른 어떤 길을 모른다. – Driff

+0

Item 또는 Reference를 저장할지 여부는 실제로 설정에 따라 다릅니다. 일반적으로 데이터 복제를 피하고자합니다. 송장의 각 항목이 정말로 고유 한 경우 송장 모델에 항목을 작성하십시오. 그러나 다른 송장과 공유 할 수있는 항목과 관련된 경우 참조가 더 적합 할 수 있습니다. 내 업데이트에서 보여준 설정은 맞춤 수량이있는 제품에 대한 참조가있는 전자 상거래 설정의 전형이됩니다. – cyberwombat

관련 문제