Node.js:Mongoose模式默认的rand-tokens不是随机的

我有这样的UserSchema,我似乎无法生成独特的随机activation_token.

我正在使用rand-token进行生成. Found here.

var UserSchema = new Schema({
        activation_token: {
            type: String,default: randToken.generate(64),},email: {
            type: String,unique: true,sparse: true
        },first_name: {
            type: String
        },last_name: {
            type: String
        }
});

似乎工作正常,但在使用Mocha运行单元测试时,所有的activation_token字段都是相同的.我最初认为这与时间有关,因为这可能是用于生成令牌的内容.对于每个新文档,时间戳可能是相同的,所以我使用一个函数生成了一些测试,这个函数一个一个生成了大约30个令牌,并且它们不相似.

关于这里发生了什么的任何想法?

以下是该问题的一些示例:

{
    "_id": {
        "$oid": "555dfd137c914edc1b41bbda"
    },"email": "oka@haek.io","first_name": "Lenora","last_name": "Aguilar","date_added": {
        "$date": "2015-05-21T15:43:01.576Z"
    },"activation_token": "EyBNwu4vxOIXMzj7W5kVOeICfWwxfjXmHkz7ZPHLjkf0MU86QM2aIKNDyvI2YmTR","__v": 0
},{
    "_id": {
        "$oid": "555dfd107c914edc1b41bbd6"
    },"email": "ediuki@mu.edu","first_name": "Eugene","last_name": "Green","__v": 0
}

解决方法

它们都是一样的,这是有意义的.您在模式定义时调用生成一次,并且您将该调用的结果提供给mongoose模式定义,而不是函数本身.你可以尝试这样的事情:

var UserSchema = new Schema({
    activation_token: {
        type: String,default: function() {
            return randToken.generate(64);
        }
    },email: {
        type: String,sparse: true
    },first_name: {
        type: String
    },last_name: {
        type: String
    }
});

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...