NodeJS / MongoDB-避免猫鼬节省错误的当前时间

时间:2018-10-22 15:59:39

标签: 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分钟一样,它们都是在同一时刻运行的。

重要提示:

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

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

1 个答案:

答案 0 :(得分:1)

created_at设置默认值时,您使用了Date.now()

实际上是返回值的函数执行,并且该值被设置为默认值。 当您运行应用程序(重新启动服务器)时该代码执行时,该时间将用作默认值。

您希望将函数引用作为默认值传递(猫鼬知道它应该每次执行以获取默认值)。

替换此行:

default: Date.now()

与此:

default: Date.now

在此处了解有关猫鼬默认设置的更多信息: https://mongoosejs.com/docs/defaults.html