在keystone.js中添加自定义字段类型

时间:2014-08-06 03:04:55

标签: node.js keystonejs

我正在尝试添加一个名为' admin'的隐藏字段类型。它只有创建模型项的人的用户ID。这在本地工作正常,但由于某种原因不能在服务器上工作。这是我做的,也许是因为我在keystone / lib中修改了一个文件?

/Models/Group.js

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

/**
 * Group Collection Model
 * =============
 */

var Group = new keystone.List('Group');

Group.add({
  name: { type: String, required: true, initial: true },
    createdAt: { type: Date, default: Date.now },
  groupId: { type: Types.Admin, required: true, initial: true, default: 'placeholder' }
});

Group.defaultColumns = 'name';
Group.register();

/ node_modules / keystone / lib / fieldTypes我添加了admin.js

    /*!
 * Module dependencies.
 */

var util = require('util'),
  utils = require('keystone-utils'),
  super_ = require('../field');

/**
 * Text FieldType Constructor
 * @extends Field
 * @api public
 */

function admin(list, path, options) {
  this._nativeType = String;
  this._underscoreMethods = ['crop'];
  admin.super_.call(this, list, path, options);
}

/*!
 * Inherit from Field
 */

util.inherits(admin, super_);


/**
 * Crops the string to the specifed length.
 *
 * @api public
 */

admin.prototype.crop = function(item, length, append, preserveWords) {
  return utils.cropString(item.get(this.path), length, append, preserveWords);
};


/*!
 * Export class
 */

exports = module.exports = admin;

/node_modules/keystone/lib/fieldTypes/index.js

补充说:

exports.Admin = require('./admin');

/ node_modules /梯形/模板/场/管理员

添加了form.jade和initial.jade模板

1 个答案:

答案 0 :(得分:1)

当你说“在服务器上”时,我会假设你指的是某些Node.js托管服务提供商(即Heroku,OpenShift等)。如果是这种情况并且它在本地工作,正如您所提到的,我怀疑您可能没有在Git中提交node_modules文件夹,因此您实施的更改不会与其余代码一起上传到您的提供商。检查您的.gitignore文件,查看其中列出的node_modules。如果是,请从他的文件中删除node_modules,提交并推送给您的提供商,您的应用应该像在本地一样在您的提供商上工作。

也就是说,我正在处理向KeystoneJS发送拉取请求(#490),该请求可选择添加并自动更新createdBycreatedAtmodifiedBymodifiedAt到模型。我们目前正在讨论实施它的最佳方式,但我怀疑我的PR或其修改版本很快就会被提取并在不久的将来上市。