片刻js没有在mongoose更新

时间:2018-05-17 21:18:39

标签: mongodb mongoose 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;
});

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

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

var now = moment();

因此,所有文档将使用相同的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")
    }
});

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