如何在将值存储到Keystone JS中的数据库之前更改值

时间:2017-10-10 13:09:57

标签: mongodb keystonejs

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,我希望通过一个分割它并返回十进制版本的函数来运行它,例如:

function decimalOdds(fraction) {
    const splitFields = fraction.split('/');
    return ((splitFields[0] / splitFields[1]) + 1).toFixed(2);
}

我希望将该功能的返回值存储为'赔率'在数据库中。这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用预保存挂钩:

Game.schema.pre('save', function(next) {
  if (this.isModified('odds')) {
    this.odds = decimalOdds(this.odds)
  }
  next()
})

您可以在文档的架构插件部分阅读更多内容: http://keystonejs.com/docs/database/#lists-plugins

您还可以在此处找到有关Mongoose架构挂钩的更多信息: http://mongoosejs.com/docs/middleware.html