Node.js:Mongoose模式默认rand标记不是随机的

Node.js:Mongoose模式默认rand标记不是随机的,node.js,mongodb,random,default,uid,Node.js,Mongodb,Random,Default,Uid,我有一个这样的UserSchema,我似乎无法生成唯一的随机激活\u令牌 我正在使用rand令牌进行生成 似乎工作正常,但当使用Mocha运行单元测试时,所有的激活\u令牌字段都是相同的。我最初认为这与时间有关,因为这可能是用来生成令牌的。对于每个新文档,时间戳可能都是相同的,因此我使用一个函数运行了一些测试,该函数一个接一个地生成了大约30个令牌,它们并不相似 你知道这里发生了什么吗 以下是一些问题的示例: { "_id": { "$oid": "555dfd137c9

我有一个这样的
UserSchema
,我似乎无法生成唯一的随机
激活\u令牌

我正在使用
rand令牌
进行生成

似乎工作正常,但当使用Mocha运行单元测试时,所有的
激活\u令牌
字段都是相同的。我最初认为这与时间有关,因为这可能是用来生成令牌的。对于每个新文档,时间戳可能都是相同的,因此我使用一个函数运行了一些测试,该函数一个接一个地生成了大约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",
    "date_added": {
        "$date": "2015-05-21T15:43:01.576Z"
    },
    "activation_token": "EyBNwu4vxOIXMzj7W5kVOeICfWwxfjXmHkz7ZPHLjkf0MU86QM2aIKNDyvI2YmTR",
    "__v": 0
}

它们都是一样的,这是有道理的。您在模式定义时调用
generate
一次,并将该调用的结果提供给mongoose模式定义,而不是函数本身。您可以尝试以下方法:

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

const randtoken = require('rand-token');
导入到js文件并生成令牌

const a=randtoken.generate(256

npm install rand-token --save
const randtoken = require('rand-token');