如何在将值存储到 Keystone JS 中的数据库之前更改值
How to alter a value before storing it to the database in Keystone JS
Keystone 和 mongo 对我来说都是新手,所以我不确定如何操作数据。
我有一个 Keystone 列表,其中的模型 (/models/Game.js
) 如下所示:
var keystone = require('keystone');
var Types = keystone.Field.Types;
var Game = new keystone.List('Game');
Game.add({
odds: { type: Types.Text, required: true, initial: true},
});
Game.track = true;
Game.defaultSort = '-createdAt';
Game.defaultColumns = 'odds';
Game.register();
赔率字段是一个字符串,例如3/1
,我想 运行 通过拆分它的函数和 return 十进制版本,例如:
function decimalOdds(fraction) {
const splitFields = fraction.split('/');
return ((splitFields[0] / splitFields[1]) + 1).toFixed(2);
}
我想在数据库中存储为 'odds' 的函数的 return 值。这可能吗?
您可以使用预保存挂钩:
Game.schema.pre('save', function(next) {
if (this.isModified('odds')) {
this.odds = decimalOdds(this.odds)
}
next()
})
您可以在文档的 schema plugins 部分阅读更多内容:
http://keystonejs.com/docs/database/#lists-plugins
您还可以在此处找到有关 Mongoose 模式挂钩的更多信息:
http://mongoosejs.com/docs/middleware.html
Keystone 和 mongo 对我来说都是新手,所以我不确定如何操作数据。
我有一个 Keystone 列表,其中的模型 (/models/Game.js
) 如下所示:
var keystone = require('keystone');
var Types = keystone.Field.Types;
var Game = new keystone.List('Game');
Game.add({
odds: { type: Types.Text, required: true, initial: true},
});
Game.track = true;
Game.defaultSort = '-createdAt';
Game.defaultColumns = 'odds';
Game.register();
赔率字段是一个字符串,例如3/1
,我想 运行 通过拆分它的函数和 return 十进制版本,例如:
function decimalOdds(fraction) {
const splitFields = fraction.split('/');
return ((splitFields[0] / splitFields[1]) + 1).toFixed(2);
}
我想在数据库中存储为 'odds' 的函数的 return 值。这可能吗?
您可以使用预保存挂钩:
Game.schema.pre('save', function(next) {
if (this.isModified('odds')) {
this.odds = decimalOdds(this.odds)
}
next()
})
您可以在文档的 schema plugins 部分阅读更多内容: http://keystonejs.com/docs/database/#lists-plugins
您还可以在此处找到有关 Mongoose 模式挂钩的更多信息: http://mongoosejs.com/docs/middleware.html