0
我有一个数据库posts
。对于每个post
,我想保存不同用户的最后打开时间。因此,我决定在后端保存绝对时间(即moment()
)并在前端显示相关时间(即,通过fromNow()
,例如2 days ago
)。在后台记录绝对时间并在前端显示相关时间
在后端:
var PostSchema = new mongoose.Schema({
... ...
lastOpens: { type: Array, default: [] },
});
PostSchema.methods.updateLastOpens = function (userId, cb) {
... ...
this.lastOpens.push({ time: moment(), userId: userId });
};
在前端:
alert(JSON.stringify(post.lastOpens[j].time))
var x = post.lastOpens[0].time.fromNow()
然而,在前端的第一行显示了很长的对象{"_isValid":true,"_d":"2017-04-20T02:42:50.932Z","_locale":{"_dayOfMonthOrdinalParseLenient":{},...
。第二个像TypeError: post.lastOpens[0].time.fromNow is not a function
。
有谁知道哪里错了,怎么做到这一点?
你推moment.js对象到数组,然后字符串化了,所以你看到的是串化的时刻对象,而不是日期。你应该推''time:moment()。fomat('YYYY-MM-DD'),...}或类似的。 – RobG
我在'alert()'中进行了字符串化处理,但没有在'var x = post.lastOpens [0] .time.fromNow()'中进行处理。 – SoftTimur
是的,但是你应该考虑的是后端将序列化对象,因此你看到的是长Json,并将它发送到前端。当它到达前端时,它不再是一个时刻对象。它是一个普通的json对象,它有数据但没有方法。我会从前端的.time内容重新创建时刻(),然后重试代码。 – Reza