2011-11-26 29 views
2

我正在關注使用node.js,express和mongodb構建博客的this教程。負責返回和更新數據的JavaScript函數

以下是控制文章提交(我認爲)的功能。

提供商和數據

因爲本文的目的是展示一個可以如何使用Node.js的一個 持久的方法,我們將利用一個抽象開始: 提供商。這些'提供者'將負責返回並更新數據。最初,我們將創建一個虛擬內存版本 ,以引導我們啓動並運行,但隨後我們將轉到使用 一個真正的持久層,而不更改調用代碼。

articleprovider-memory.js:

var articleCounter = 1; 

ArticleProvider = function(){}; 
ArticleProvider.prototype.dummyData = []; 

ArticleProvider.prototype.findAll = function(callback) { 
    callback(null, this.dummyData) 
}; 

ArticleProvider.prototype.findById = function(id, callback) { 
    var result = null; 
    for(var i =0;i<this.dummyData.length;i++) { 
    if(this.dummyData[i]._id == id) { 
     result = this.dummyData[i]; 
     break; 
    } 
    } 
    callback(null, result); 
}; 

ArticleProvider.prototype.save = function(articles, callback) { 
    var article = null; 

    if(typeof(articles.length)=="undefined") 
    articles = [articles]; 

    for(var i =0;i< articles.length;i++) { 
    article = articles[i]; 
    article._id = articleCounter++; 
    article.created_at = new Date(); 

    if(article.comments === undefined) 
     article.comments = []; 

    for(var j =0;j< article.comments.length; j++) { 
     article.comments[j].created_at = new Date(); 
    } 

任何人都可以用簡單的英語向我解釋了每個功能在做什麼(對不起,我一個JavaScript初學者)?

(順便說一下,這是因爲任何常見的做法是,筆者決定只用一個ArticleProvider CAP開始?)

回答

3

此文件是各種實例方法ArticleProvider類定義。

  1. 定義文章提供商的功能,然後用原型定義更多功能「的findAll」,「findById」的 和「保存」,意味着你可以使用 語法調用這些函數:

    foo = new ArticleProvider(); 
    foo.findAll(callback); 
    foo.findById(id, callback); 
    foo.save(articles, callback); 
    
  2. articleCounter是本地可用含有 ArticleProvider定義的文件的可變

  3. dummyData是內部雜物BLE提供到ArticleProvider對象

  4. ArticleProvider.findAll(回調)

    會調用回調函數(陣列)與目前保存到ArticleProvider的所有文章。 來電必須定義一個回調函數可以接受一個變量,並期望 變量來填充物品的排列稱爲

  5. ArticleProvider.findById時(ID,回調)

    會調用回調函數(文章),其中一篇文章與參數中提供的'id' 相匹配。同樣,回叫由呼叫者定義,並接受單個參數 ,這將是文章發現

  6. ArticleProvider。保存(文章,回調)

    你這裏列出什麼被截斷,所以我只是有這個功能了部分答案:

    將接受物品的排列,並設置在提交的文章各個領域。這些 領域包括文章ID,文章創建日期,文章評論和留言作成 日期

    我猜測,在代碼中未列出這些物品都保存到 ArticleProvider.dummyData,並調用回調有一些參數。