Функции JavaScript, которые отвечают за возврат и обновление данных - PullRequest
2 голосов
/ 26 ноября 2011

Я следую этому руководству по созданию блога с помощью node.js, express и mongodb.

Ниже приведены функции, управляющие подачей статей (я думаю).

провайдеров и данных

Потому что цель этой статьи - показать, как можно использовать Постоянный подход в 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)?

(кстати, именно из-за какой-либо общепринятой практики автор решил начать с CAP только в ArticleProvider?)

1 Ответ

3 голосов
/ 26 ноября 2011

Этот файл является определением класса для ArticleProvider с различными методами экземпляра.

  1. Определение поставщика статьи в качестве функции и затем использование прототипа для определения других функций 'findAll', 'findById',и «сохранить» означает, что вы можете вызывать эти функции, используя синтаксис:

    foo = new ArticleProvider();
    foo.findAll(callback);
    foo.findById(id, callback);
    foo.save(articles, callback);
    
  2. articleCounter - это переменная, локально доступная для файла, содержащего определение ArticleProvider

  3. dummyData - это внутренняя переменная, доступная объекту ArticleProvider

  4. ArticleProvider.findAll (обратный вызов)

    Будет вызывать обратный вызов (массив) со всеми сохраненными в данный момент статьямиСтатьеProvider.Вызывающий должен определить функцию обратного вызова, которая может принимать одну переменную, и ожидать, что переменная будет заполнена массивом статей при вызове

  5. ArticleProvider.findById (id, callback)

    Будет вызывать функцию обратного вызова (article) с одной статьей, которая соответствует 'id', указанному в параметре.Опять же, обратный вызов определяется вызывающей стороной и принимает один параметр, который будет найден статьей

  6. ArticleProvider.save (article, callback)

    То, что вы перечислили здесьусечен, поэтому у меня есть только частичный ответ для этой функции:

    Примет массив статей и установит различные поля в представленных статьях.Эти поля включают идентификатор статьи, дату создания статьи, комментарии статьи и даты создания комментария

    Я предполагаю, что в коде, не указанном в списке, эти статьи сохраняются в ArticleProvider.dummyData, и что обратный вызов вызывается с помощьюнекоторый параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...