通過

2015-10-09 47 views
0

將貓鼬字段的值存儲到var和interate中使得更多的wave越來越深入node.js和mongo,但是我碰到了一堵牆。 我已經將數據從表單推送到一個帶貓鼬的集合中,我可以看到它被拉入JS文件並在下面用console.log調用文檔。通過

var fields = { 'cheap': 1, 'number': 1 }; 
var query = userModel.find({}).select(fields); 

query.exec(function (err, docs) { 
    if (err) return handleError(err); 
    console.log(docs + 'first'); 

    request(url, function(error, response, html) { 
     if (!error && response.statusCode == 200) { 
      var $ = cheerio.load(html); 
      //var $el = $("a:contains('Xbox')"); 
      var $el = $('a:contains(' + docs + ')'); 
      console.log(docs + 'second') 

      if ($el.length) { 
      client.messages.create({ 
      to: "+ '+ cheap.number +'", 
      from: "+61418739508", 
      body: $el.text() 
      }, function(err, message) { 
      if(err){ 
       console.log(err); 
      } else { 
       console.log(message.sid); 
      } 
      }); 
      console.log($el.text()); 
     } else { 
      console.log('hey'); 
     } 
     } 
    }); 
}); 

輸出:

[ { _id: 561650245b3d0d57ad7f3c72, 
    cheap: 'menus', 
    number: '0000000000' } ] 

不過,現在我想借「便宜」和「數量」字段的值,並將它們存儲爲,我可以通過對以下遍歷一個變種功能。

任何人都可以指出我需要在正確的方向上工作嗎?它看起來像是一個難以捉摸的失蹤片段。

+0

你這篇日誌的輸出肯定'的console.log(便宜);''是[{_id:561650245b3d0d57ad7f3c72, cheap:'menus', number:'0000000000'}]' 那麼數字參數('exec' func的回調)呢? –

+0

100%肯定,數字參數正在消失,我已經將其刪除,只剩下「便宜」,並且控制檯日誌結果保持不變。但是,從'var fields'中刪除'number'字段只會返回obj id和'cheap'。 –

回答

0

我認爲貓鼬是異步,你應該將請求功能exec像這樣

` query.exec(function (err, cheap, number) { 
    if (err) return handleError(err); 
    console.log(cheap); 
    request(url, function(error, response, html) { 
    if (!error && response.statusCode == 200) { 
    var $ = cheerio.load(html); 

    async.each(cheap, function(iterateCheap, callback){ 
     var $el = $("a:contains(" + cheap + ")"); 

    }, function(err){ 
     if(err) { 
      console.log(err); 
     } else { 
      console.log('We successfully iterate on all cheap') 
     } 
    }) 
    ......` 

UPDATE1: 還是應該async.js模塊和waterfall方法使用針對這種情況

+0

抱歉抱歉已更新此更清晰。這工作正常,我仍然收到相同的console.log輸出。然而,我的具體問題是如何從輸出的'cheap'和'number'字段中調用值? –

+0

很明顯,便宜的返回數組數據類型應該迭代並返回適當的值。 –

+0

您能否提供一個簡短的代碼示例或指向我的某些文檔?我錯過了一些東西。 –

0

找到我正在尋找的東西。需要一個for.. in結構來遍歷對象的屬性。從那裏我不得不調用對象和屬性類型,它的工作原理。

魔法固定它:

var docs; 
    for (var key in docs) { 
    var value = docs[key]; 
    console.log(key + ", " + value); 
    } 

全碼:

var query = userModel.find({}); 

query.exec(function (err, docs) { 
    if (err) return handleError(err); 
    //console.log(docs); 

    var docs; 
    for (var key in docs) { 
    var value = docs[key]; 
    console.log(key + ", " + value); 
    } 

    request(url, function(error, response, html) { 
     if (!error && response.statusCode == 200) { 
      var $ = cheerio.load(html); 
      //var $el = $("a:contains('Xbox')"); 
      var $el = $('a:contains(' + value.cheap + ')'); 
      //console.log($el); 

      if ($el.length) { 
      client.messages.create({ 
      to: value.number, 
      from: "+61418739508", 
      body: $el.text() 
      }, function(err, message) { 
      if(err){ 
       console.log(err); 
      } else { 
       console.log(message.sid); 
      } 
      }); 
      console.log($el.text()); 
     } else { 
      console.log('hey'); 
     } 
     } 
    }); 
});