2015-12-05 2 views
0

У меня есть следующий базовый документ в Монго:Прицепные Mongo данные в шаблон EJs

connecting to: test 
> db.car.find(); 
{ "_id" : ObjectId("5657c6acf4175001ccfd0ea8"), "make" : "VW" } 

Я использую экспресс, MongoDB родной клиент (не мангуст) и EJS.

collection.find().toArray(function (err, result) { 
     if (err) { 
     console.log(err); 
     } else if (result.length) { 
     console.log('Found:', result); 
     mk = result; 
     console.log('mk = ', mk); 
     } else { 
     console.log('No document(s) found with defined "find" criteria!'); 
     } 
     //Close connection 
     db.close(); 
    }); 
    } 
}); 

Вот рендер код:

// index page 
app.get('/', function(req, res) { 
    res.render('pages/index', { make: result }); 
    }); 

И я хочу, чтобы передать данные сделать: VW в мой index.ejs файл:

<h2>Cars:</h2> 
     <h3>My favorite make is <%= make %> 

Это должно быть реальным и простым но я просто не понимаю, как передать переменную «mk» (которую я могу console.log на экран) визуализировать с помощью представления ejs?

+0

Чтобы уточнить, каков результат «результата» в вашем коде визуализации. Не могли бы вы 'console.log' создать объект result в коде рендеринга и добавить это в свой вопрос? –

+0

Метод запроса [find()] должен быть в методе маршрута [app.get()]. Затем вы можете назначить результат запроса как переменную 'EJS', как ответ Микелема. Кроме того, я думаю, что вы используете модуль 'node-mongodb-native' для доступа к MongoDB. Если вы хотите хранить данные в определенной форме, например номер или дату, вы должны использовать ORM, например Mongoose. В противном случае ваши данные будут сохранены в виде строки. Как правило, это проблема при обработке даты типа «дата рождения» или числа, такого как «общая сумма» и т. Д. Таким образом, вам нужно будет преобразовывать значения каждый раз, когда вы хотите использовать их в расчете. Удачи .. – efkan

+0

$ узловые приложение-mongo.js 8080 является портом Соединение установлено в MongoDB: // локальный: 27017/тест Найдено: [{_id: 5657c6acf4175001ccfd0ea8, сделать: 'VW'}] тк = [ {_id: 5657c6acf4175001ccfd0ea8, make: 'VW'}] –

ответ

1

Вы должны использовать метод найти внутри маршрута (или обратного вызова), чтобы получить результат и сделать его:

app.get('/', function(req, res) { 
    collection.find().toArray(function(err, result) { 
     if(err) { 
      console.log(err); 
      res.status('400').send({error: err}); 
     } else if(result.length) { 
      console.log('Found:', result); 
      mk = result; 
      console.log('mk = ', mk); 
      res.render('pages/index', {make: mk}); 
     } else { 
      console.log('No document(s) found with defined "find" criteria!'); 
      res.status('400').send({error: 'No document(s) found'}); 
     } 
     //Close connection 
     db.close(); 
    }); 
}); 
+0

спасибо Мишель. Я изменил код в соответствии с вашим предложением выше.Теперь, когда я передаю переменную «mk» в ejs, я получаю следующее на странице html: Автомобили: Моя любимая марка [object Object] –

+0

Что такое имя переменной? результат, res, make или mk? <%= % –

+0

Вы должны получить свойство объекта, в котором вы нуждаетесь, я не знаю, что вам нужно для печати, возможно, что-то вроде '<% = make.theproperty%>'. Также объект может быть массивом результатов, поэтому вам нужно его закодировать. Пожалуйста, подтвердите этот ответ и напишите еще один вопрос, если он вам нужен. –

0

Очень просто, Ваш, выводит массив JSON объектов

Здесь это один из способов визуализировать:

[{a:b},{a:b},{a:b},{a:b}]; 

Если вы хотите, чтобы первый результат было бы массив [0].

так что вам просто нужно назвать это таким образом:

<%= make[0].(your database key here) => 
//example 
<%= make[0].name => 

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

0

Он должен быть простым, но вы определяете mk так же, как это: mk = result Так, потому что вы хотите передать переменную в ejs файл, который нужно

"var mk = result" 

Иметь хороший день, Бен.

Смежные вопросы