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

标签 node.js mongodb date ubuntu mongoose

我想检查一条记录是否在 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/

相关文章:

mongodb - 如何从 MongoDB 集合中获取聚合

Java:两个日期之间的差异(以月为单位)

r - 计算R中间隔内的日期

java - 确定任务是否较早,同时只知道日期是否较早以及时间是否较早

node.js - 错误 : Socket is not writable in Node. JS

javascript - RSA私钥无法解密数据

node.js - Twilio 短信营销 Node 。命令无法启动应用程序并抛出错误 mac

Mongodb slaveOk - 首选服务器

node.js - Sequelize findByPk 的结果

javascript - Socket.io 与 PubSub : Less to no real-time data displayed after multiple page refresh