2016-12-25 10 views
1

Я использую MongoDBClient в Node.js и Pug.Как отобразить значение «полей» из базы данных в файле Pug?

Я хотел бы получить все имя своей пиццерии в моей базе данных. Таким образом, я написал эту строку: collection.find({cook:'Pizza'}), чтобы выбрать все пиццерии, и атрибут «name» существует.

Но find возвращает курсор, поэтому я не могу напрямую использовать его возврат следующим образом: var array_pizzerias_names = collection.find({cook:'Pizza'}).get('name'). (NB: Я знаю, что funciton get не существует).

Как я мог это сделать?

В моем файле МОПС, я написал эти несколько строк:

 - for(var i = 0; i < array_pizzerias_names.length; i++) { 
      p=array_pizzerias_names[i].name 
     - } 

ответ

1

я нашел решение.

MongoClient (require('mongodb').MongoClient) содержит сигнатуру метода find, которая принимает 2 параметра, а вторая - обратный вызов; последним параметром последнего является cursor, которые имеют способ toArray.

Метод toArray принимает обратный вызов; его последним параметром является array, содержащий все результаты find, и может использоваться в Pug.

Приведенный ниже код работает.

Node.js код (JavaScript-файл):

 collection.find({cuisine: speciality}, (error, cursor) => { 
      handleError(error, res); 

      cursor.toArray((error, array_results) => { 
       handleError(error, res); 

       app.locals.speciality = speciality; 
       app.locals.array_documents = array_results; 
       res.render("speciality.pug"); 

      }); 
     }); 

Мопс файл:

doctype html 
html(lang='fr') 
    head 
     title='Speciality' 
     body 
      h1 Speciality : #{speciality} - Number of buildings : #{array_documents.length} 
      - for(var i = 0; i < array_documents.length; i++) { 
       p=array_documents[i].name + " - Address : " + array_documents[i].address.street + " " + array_documents[i].borough + ", building n°" + array_documents[i].address.building 
      - }