gpt4 book ai didi

node.js - NodeJS/MongoDB - 避免 mongoose 节省错误的当前时间

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:36 25 4
gpt4 key购买 nike

我想检查一条记录是否在 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.createdAtDate.now() 少了近 2 小时 30 分钟,它们都是在同一时刻运行的。

重要:

我正在使用 ubuntunginx 服务器上运行此应用程序。

我做错了什么,我找不到与此问题相关的任何主题。

最佳答案

当您为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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com