我正在使用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();
答案 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]);