我想检查记录是否在30分钟后过期。 我是这样的:
if (orderBlocked.createdAt + (30 * 60 * 1000) > Date.now())
我的orderBlocked模型如下:
const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const userBlockedSchema = new Schema({
_id: Schema.Types.ObjectId,
user: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
attemp: {
type: Number,
required: true
},
createdAt: {
type: Number,
default: Date.now()
},
});
const VerificationClass = mongoose.model('OrderBlocked', userBlockedSchema);
module.exports = VerificationClass;
orderBlocked.createdAt
字段等于我上次重新启动服务器的时间。为什么该字段具有相同的值并且不更新?我同时登录了两个Date.now()
。
console.log(Date.now(), orderBlocked.createdAt);
console.log
运行后,我立即查看了结果的次数:
Date.now()
:(日期)17:41:25 这是正确的值
orderBlocked.createdAt
:(日期)15:08:37
就像您看到的orderBlocked.createdAt
比Date.now()
少了2小时30分钟一样,它们都是在同一时刻运行的。
重要提示:
我正在使用nginx
在ubuntu
服务器上运行此应用程序。
我在做什么错,我找不到与此问题相关的任何主题。
答案 0 :(得分:1)
为created_at
设置默认值时,您使用了Date.now()
。
实际上是返回值的函数执行,并且该值被设置为默认值。 当您运行应用程序(重新启动服务器)时该代码执行时,该时间将用作默认值。
您希望将函数引用作为默认值传递(猫鼬知道它应该每次执行以获取默认值)。
替换此行:
default: Date.now()
与此:
default: Date.now
在此处了解有关猫鼬默认设置的更多信息: https://mongoosejs.com/docs/defaults.html