2

我正在尝试添加一个名为“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/keystone/模板/字段/管理员

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

4

1 回答 1

1

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

也就是说,我目前正在对 KeystoneJS 的拉取请求 ( #490 ) 进行处理,该请求将可选地添加并自动更新createdBy, createdAt,modifiedBymodifiedAt到模型。我们目前正在讨论实施它的最佳方法,但我怀疑我的 PR 或它的修改版本很快就会被撤消并在不久的将来可用。

于 2014-08-06T04:34:54.777 回答