我想检查一条记录是否在 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 分钟,它们都是在同一时刻运行的。
重要:
我正在使用 ubuntu
在 nginx
服务器上运行此应用程序。
我做错了什么,我找不到与此问题相关的任何主题。
最佳答案
当您为created_at
设置默认值时,您使用了Date.now()
。
这实际上是返回一个值的函数执行,并且该值被设置为默认值。 由于该代码在您运行应用程序(重新启动服务器)时执行,因此该时间将用作默认值。
您想要传递函数引用作为默认值( Mongoose 知道它应该每次执行它以获得默认值)。
替换这一行:
default: Date.now()
这个:
default: Date.now
在此处了解有关 mongoose 默认值的更多信息: https://mongoosejs.com/docs/defaults.html
关于node.js - NodeJS/MongoDB - 避免 mongoose 节省错误的当前时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933386/