【问题标题】:NodeJS / MongoDB - Avoid wrong current time saving by mongooseNodeJS / MongoDB - 避免 mongoose 错误地节省当前时间
【发布时间】:2018-10-23 00:34:41
【问题描述】:

我想检查记录是否在 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(): (date) 17:41:25 这是正确的值

orderBlocked.createdAt:(日期)15:08:37

就像您看到的那样,orderBlocked.createdAtDate.now() 少了将近 2 小时 30 分钟,它们都是在同一时刻运行的。

重要提示:

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

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

【问题讨论】:

    标签: node.js mongodb date ubuntu mongoose


    【解决方案1】:

    当您为created_at 设置默认值时,您使用的是Date.now()

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

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

    替换这一行:

    default: Date.now()
    

    用这个:

    default: Date.now
    

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

    【讨论】:

      猜你喜欢
      • 2017-08-18
      • 2018-07-10
      • 2017-04-06
      • 1970-01-01
      • 2021-03-17
      • 2017-12-18
      • 1970-01-01
      • 2020-11-18
      • 2021-05-15
      相关资源
      最近更新 更多