mongoose 中的 moment js 没有更新

Pak*_*Chu 2 mongoose mongodb momentjs mongoose-schema

所以我在 momentjs 上遇到了麻烦。当我拨打电话后,时间戳没有更新。我等了 30 秒才再次拨打电话,但仍然得到相同的时间。我怎样才能解决这个问题?下面是我的代码,所以让我知道我做错了什么。

var mongoose = require('mongoose');
var moment = require('moment');
var now = moment();

var UserSchema = new mongoose.Schema({
    email: { type: String, default: ''},
    name: { type: String, default: ''},
    password: { type: String, default: ''},
    timestamp: {type: String, default: now.format("dddd, MMMM Do YYYY, h:mm:ss a")}
});

module.exports = mongoose.model('UserSchema', UserSchema);

module.exports = {
    find: function(params, callback) {
        User.find(params, function(err, result) {
            if (err) {
                callback(err, null);
                return;
            }
            callback(null, result);
            return;
        });
    },
    create: function(params, callback) {
        User.create(params, function(err, result) {
            if (err) {
                callback(err, null);
                return;
            }
            callback(null, result);
            return;
        });
    }
}

router.post('/', function(req, res, next) {
  UserController.create(req.body, function(err, result) {
    if (err) {
      res.json({
        confirmation: 'fail',
        message: err
      });
      return;
    }
    res.json({
      confirmation: 'success',
      result: result
    });
    return;
  });
  return;
});
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

Joh*_*yHK 5

这行代码只会在模块加载时执行一次:

var now = moment();
Run Code Online (Sandbox Code Playgroud)

因此所有now文档都将使用相同的值。

相反,您的模式定义应该使用一个函数,每次创建新文档时都会调用该函数:

var UserSchema = new mongoose.Schema({
    email: { type: String, default: ''},
    name: { type: String, default: ''},
    password: { type: String, default: ''},
    timestamp: {
        type: String, 
        default: () => moment().format("dddd, MMMM Do YYYY, h:mm:ss a")
    }
});
Run Code Online (Sandbox Code Playgroud)

作为旁注,请考虑使用Date数据类型而不是string时间戳,因为它更加灵活和高效。