Передача данных MongoDB в представление Jade в ExpressJS - PullRequest
2 голосов
/ 25 февраля 2012

У меня есть вопрос, надеюсь, вы можете помочь с.По сути, я делаю запрос к коллекции MongoDB и пытаюсь передать результаты обратно в нефритовое представление.

app.helpers({
  clients: function(){
    users.find({uid:req.session.uid}).toArray(function(err, post){
      if(err){
        console.log(err);
      }else{
        return post;
      }
    });
  }
});

Здесь я ссылаюсь на вспомогательный объект в представлении

p #{clients}

Прямо сейчас я просто получаю [объект объекта] в качестве значения в представлении.Если я запишу результаты, я получу ожидаемые результаты документа, но если я попытаюсь поместить их в массив или переменную, я получу результат [объектный объект].Есть идеи?

1 Ответ

1 голос
/ 25 февраля 2012

Это не сработает, потому что вы используете следующую структуру:

clients: function() {
    (some code)(function() {
        return variable;
    });
}

Оператор return variable; возвращает внутреннюю функцию .Но вам нужно вернуть переменную из внешней функции .Так как это сделать?На самом деле вы не можете.Вы должны выполнить запрос в представлении и сохранить результат, например, в запросе, а затем передать переменную запроса в шаблон.Вы не можете использовать асинхронные функции в помощниках.

Другое дело, что когда вы используете функцию в помощнике, тогда в шаблоне вы должны использовать

p #{ clients() }

, потому что это функция.Тем не менее, в этом случае это не сработает.

...