KeystoneJS:随机字符串作为默认值

时间:2016-08-23 05:38:47

标签: mongodb keystonejs

我正在使用KeystoneJS构建CRM。部分功能是广告系列。每个广告系列都应该有一个唯一的标识符(除了冗长的mongodb _id),广告系列代码。

在下面的KeystoneJS广告系列模型中,我生成一个随机字符串并将其设置为campaignCode字段的默认值。

这很有效,但不幸的是,campaignCode将始终是相同的randomstring(unleass我重新启动服务器)。

所以问题是:每次在Admin-UI中创建新的广告系列时,如何触发randomstring.generate()函数?

var keystone = require('keystone');
var randomstring = require('randomstring');
var Types = keystone.Field.Types;


var Campaigns = keystone.List('Campaigns',{
    map:{name:'campaignCode'}
});

Campaigns.add({
    campaignCode:{type:Types.Text,default: randomstring.generate(6)},
    subject:{type:Types.Text},
    body:{type:Types.Markdown,height:500}
});

Campaigns.track = true;
Campaigns.defaultSort = 'campaignCode';
Campaigns.defaultColumns = 'campaignCode,subject';
Campaigns.register();

Campaigns.register();

4 个答案:

答案 0 :(得分:2)

我设置的字段没有默认值或初始值。

对我来说,我正在设置一个初始随机密码......

User.add({
    password: { type: Types.Password },

然后在预保存挂钩中生成密码。

User.schema.pre('save', function (next) {
    if (!this.password) {
        this.password = Math.random().toString(36).slice(-8)
        console.log(this.password);
    }
    next();
});

或使用this.isNew

User.schema.pre('save', function (next) {
    if (this.isNew) {
        this.password = Math.random().toString(36).slice(-8)
        console.log(this.password);
    }
    next();
});

答案 1 :(得分:0)

default: (function () {
        return function () {
            return randomstring.generate(6);
        }
    })()

上述更改应该对您有用。

答案 2 :(得分:0)

首先生成randomstring并使用var作为默认'参数值:

var keystone = require('keystone');
var randomstring = require('randomstring');
var Types = keystone.Field.Types;

var randoDefault=randomstring.generate(6);

var Campaigns = keystone.List('Campaigns',{
    map:{name:'campaignCode'}
});

Campaigns.add({
    campaignCode:{type:Types.Text,default: randoDefault},
    ...

答案 3 :(得分:0)

而不是 var randoDefault = randomstring.generate(6);

你可以试试 var randoDefault = keystone.utils.randomString([6,24]);