SailsJS - 如何在创建记录时指定字符串属性长度而不会出错?
Posted
技术标签:
【中文标题】SailsJS - 如何在创建记录时指定字符串属性长度而不会出错?【英文标题】:SailsJS - How to specify string attribute length without getting error when creating record? 【发布时间】:2014-02-17 00:40:28 【问题描述】:我正在使用 Sails 0.9.8 和 mysql 并想做这样的事情
localhost:1337/player/view/<username of player>
而不是
localhost:1337/player/view/<id of player>
所以我在模型中放了这样的东西:
'username' :
type: 'string',
unique: true,
minLength: 4,
maxLength: 32,
required: true
,
但是每次我运行sails lift时都会出错:
[Error: ER_TOO_LONG_KEY: Specified key was too long; max key length is 767 bytes] code: 'ER_TOO_LONG_KEY', index: 0
所以在我运行完模块后,我发现这是因为默认情况下,Sails 在数据库中赋予字符串类型属性的长度为 255。给定的长度可以用 'size' 覆盖,但在创建记录时会导致另一个错误。
'username' :
type: 'string',
unique: true,
minLength: 4,
maxLength: 32,
size: 32,
required: true
,
创建记录时出现的错误:
Error: Unknown rule: size
at Object.match (<deleted>npm\node_modules\sails\node_modules\waterline\node_modules\anchor\lib\match.js:50:9)
at Anchor.to (<deleted>\npm\node_modules\sails\node_modules\waterline\node_modules\anchor\index.js:76:45)
at <deleted>\npm\node_modules\sails\node_modules\waterline\lib\waterline\core\validations.js:137:33
问题是,如何在创建记录时指定字符串列的大小(以便使用唯一键)而不报错?
【问题讨论】:
我只是猜测,但看起来问题是锚没有定义规则。 balderdashy/anchor你能在锚点上提交问题吗? 好的,我会的。谢谢! 【参考方案1】:标记的答案很老。根据最新的sails版本(截至撰写本答案之日为1.0.2),
我像这样使用columnType
属性:
attributes:
longDescription:
type: 'string',
columnType: 'text'
【讨论】:
你的规则!这对我有用!!! ***.com/a/50428226/3089077【参考方案2】:您可以通过 types 对象定义 custom validation rules 来解决此问题。具体来说,可以通过定义一个始终返回 true 的自定义 size
验证器来解决给定的问题。
// api/models/player.js
module.exports =
types:
size: function()
return true;
,
attributes:
username:
type: 'string',
unique: true,
minLength: 4,
maxLength: 32,
size: 32,
required: true
【讨论】:
有人给这个人一枚奖章!以上是关于SailsJS - 如何在创建记录时指定字符串属性长度而不会出错?的主要内容,如果未能解决你的问题,请参考以下文章