【发布时间】:2018-11-29 10:09:37
【问题描述】:
我正在为我的项目使用 keystone。在'Post'数据库中有publishedDate,我想用下面的代码格式化它。
function formatDate(date) {
var monthNames = [
"Ocak", "Şubat", "Mart",
"Nisan", "Mayıs", "Haziran", "Temmuz",
"Ağustos", "Eylül", "Ekim",
"Kasım", "Aralık"
];
var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();
return day + ' ' + monthNames[monthIndex] + ' ' + year;
}
var q = keystone.list('Post').model.findOne({
state: 'published',
slug: locals.filters.post,
}).populate('author categories');
q.exec(function (err, result) {
Object.keys(result).forEach(function (key) {
var element = result[key];
element.newDate = formatDate(element.publishedDate);
});
locals.data.post = result;
next(err);
});
});
当我运行项目时发生错误。但我知道 'publishedDate' 是一个日期值。
Mongoose model 'error' event fired on 'Post' with error:
Cannot read property 'getDate' of undefined TypeError: Cannot read property 'getDate' of undefined
【问题讨论】:
-
element.newDate = formatDate(new Date(element.publishedDate));。您正在将字符串传递给需要 Date 对象的函数 -
似乎没有设置
element.publishedDate。 -
上面写着
property 'getDate' of undefined,所以你应该试着找出它为什么是undefined -
只要检查 element 是否有
publish edDate属性。如果没有,它将是undefined,您将收到错误消息。 -
整个
Object.keys(result).forEach都是可疑的。你已经完成了findOne。它真的会返回一个对象,其中每个属性都引用具有publishedDate属性的对象吗?这似乎很奇怪。我希望你能做一个find并得到一个数组。
标签: javascript node.js mongoose keystonejs