【问题标题】:Cannot read property 'getDate'无法读取属性“getDate”
【发布时间】: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


【解决方案1】:

替换

var day = date.getDate();
var monthIndex = date.getMonth();
var year = date.getFullYear();

进入

var day = new Date(date).getDate();
var monthIndex = new Date(date).getMonth();
var year = new Date(date).getFullYear();

【讨论】:

    【解决方案2】:

    来自您的代码:

    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();
    

    你确定在date 对象中你真的有一个getDate()date.getMonth()getFullYear(),因为我没有看到你在哪里实例化你的日期new Date()

    也许你可能想经历这个,它可能会有所帮助。

        var today = new Date();
        var day = today.getDate();
        var month = today.getMonth()+1; //January is 0!
        var year = today.getFullYear();
        
        if(day<10) {
            day = `0${day}`
        } 
        
        if(month<10) {
            month = `0${month}`
        } 
        
        today = `${month} / ${day} / ${year}`;
        alert(`Today's date is "${today}"`);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-07
      • 2022-01-22
      • 2018-05-13
      • 2015-03-29
      • 2018-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多