2012-06-04 3 views
2

Я сохранил несколько наборов данных для MongoDB, используя mongoose.js. Но у меня возникла проблема с отображением их на сайте html с помощью express.js и ejs.Отображение дат от MongoDB с помощью Express.js

Вот мой сценарий:

Модель

var mongoose = require('mongoose'); 

var Schema = mongoose.Schema; 
var ObjectId = Schema.ObjectId; 

var ItemSchema = new Schema({ 
    _id: ObjectId, 
    creationTime: Date, 
    modificationTime: Date, 
    title: String 
}); 
var Item = mongoose.model('item', ItemSchema); 
module.exports.Item = Item; 

Маршрут:

app.get('/item/:id', function(req, res) { 

    Item.findById(req.params.id, function(err, doc){ 

     console.log(doc); //This check displays everything correctly on console 

     res.render('item.html.ejs', { 
      item : doc 
     }); 
    }); 
}); 

Вид:

<h1><%= item.title %>:</h1> 
<p>Creation: <%= item.creationDate %></p> 
<p>Modification: <%= item.modificationDate %></p> 

Результатом этого параметра является то, что заголовок отображается правильно, а обе даты - undefined.

Я предполагаю, что это как-то связано с форматом ISODate от MongoDB. Но я не могу найти решение о том, как его преобразовать для отображения в html-представлениях.

Я ценю вашу помощь. Cheers

+1

Я не думаю, что речь идет о формате даты MongoDB, но при желании вы можете использовать [moment.js] (HTTP: // momentjs .com /), чтобы преобразовать его в более читаемый формат. – Mustafa

+0

Вы можете использовать moment.js в узле. – chovy

+0

Серьезно? Я забираю этот вопрос? Что это? Reddit? – Sven

ответ

1

Если вы только что скопировали и вставили код, решение очень простое.

В вашей модели вы определили создание Time и модификация Time в шаблоне вы пытаетесь получить доступ к item.creation Date и item.modification Date.

После этого изменения вы сможете увидеть что-то другое, но не определенное, но вам, вероятно, все равно нужно преобразовать его в правильный формат даты.

+0

Иногда в жизни вы спрашиваете себя, полностью ли вы отстали.- Большое вам спасибо :-) – Sven

+0

Добро пожаловать ;-) – TheHippo

9

У меня есть следующие помощники, использующие moment.js в моих проектах.

date: function(date){ 
    moment(date).format('YYYY-MM-DD hh:mm:ss'); 
}, 
fromNow: function(date){ 
    moment(date).fromNow() 
} 
+0

Спасибо за подсказку. Это очень хороший помощник :-) – Sven

+0

хороший. Спасибо за совет! – Tronic

1

Я добавить EJs фильтр, используя приведенный выше пример, но мне пришлось изменить его немного, чтобы заставить его работать:

Создать «created_at» атрибут на схеме мангустов и автоматически создать его сохранить ():

var ItemSchema = new Schema({ 
    name : { type: String, required: true, trim: true } 
    , created_at : { type: Date } 
}); 


ItemSchema.pre('save', function(next){ 
    if (!this.created_at) { 
    this.created_at = new Date; 
    } 
    next(); 
}); 

Установите момент (и писать package.json)

npm install moment --save 

Добавить фильтр в app.js или везде, где вы определяете фильтры для EJS:

var moment = require('moment'); 

ejs.filters.fromNow = function(date){ 
    return moment(date).fromNow() 
} 

Используйте фильтр в page.ejs

<span class="created_at"><%=: item.created_at | fromNow %></span> 
Смежные вопросы