簡體   English   中英

Node.js模塊從MongoDB數據庫中獲取數據

[英]Node.js module to fetch data from MongoDB database

我想使用一個模塊從MongoDB數據庫中獲取和處理數據。 (它應該生成一個表示我的Express.js網站的導航欄的對象)

我想到做這樣的事情:

var nav = { Home: "/" };
module.exports = function() {
  MongoClient.connect(process.env.MONGO_URL, function(err, db) {
    assert.equal(err, null);
    fetchData(db, function(articles, categories) {
      combine(articles, categories, function(sitemap) {
        // I got the data. What now?
        console.log("NAV: ", nav);
      })
    });
  });
};

var fetchData = function(db, callback) {
  db.collection('articles').find({}).toArray(function(err, result) {
    assert.equal(err);
    articles = result;
    db.collection('categories').find({}).toArray(function(err, result) {
      assert.equal(err);
      categories = result;
      db.close();
      callback(articles, categories);
    });
  });
};

var combine = function(articles, categories, callback) {
  categories.forEach(function(category) {
    nav[category.title] = {};
    articles.forEach(function(article) {
      if(article.category == category.name) {
        nav[category.title][article.title] = "link";
      }
    })
  });
  callback(nav);
};

從第6行開始,我確實擁有所需的所有數據。

(一個對象,當前類似於{ Home: '/', Uncategorized: { 'Hello world!': 'link' } } ))

但是由於我處於匿名函數中,所以我不知道如何返回該值。 我的意思是, return只會返回調用它的函數...最后,MongoClient.connect將接收我的數據。

如果我改為設置一個變量,它將設置為module.exports在Node甚至可以從數據庫查詢數據之前返回,對嗎?

為了使這項工作我該怎么辦?

它應該導致某種功能,例如

var nav = require('nav');
console.log(nav());

提前致謝!

您可以使用貓鼬模塊或僧侶模塊。 這些模塊已正確測試。

只需使用

npm安裝貓鼬或和尚

添加另一個回調:

var nav = { Home: "/" };
module.exports = function(cb) {
    MongoClient.connect(process.env.MONGO_URL, function(err, db) {
        assert.equal(err, null);
        fetchData(db, function(articles, categories) {
            combine(articles, categories, function(sitemap) {
                cb(sitemap);
            })
        });
    })
});

然后使用這種方式:

var nav = require('nav');
nav(function(sitemap){ console.log(sitemap); });

關於貓鼬的建議很好,您可以研究一下,但是我認為您已經完成了從數據庫中獲取數據的工作。 您只需要在主節點流中訪問它即可。

您可以嘗試以下方法:

module.exports.generateNav = function() {
  MongoClient.connect(process.env.MONGO_URL, function(err, db) {
    assert.equal(err, null);
    var output = fetchData(db, function(articles, categories) {
      combine(articles, categories, function(sitemap) {

      })
    });
    return (output);
  });
};

然后,可以在主應用程序中通過以下方式調用它:

var nav = require('nav');
navigation = nav.generateNav();
console.log(navigation);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM