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 - 如何在创建记录时指定字符串属性长度而不会出错?的主要内容,如果未能解决你的问题,请参考以下文章

创建两个模型时的sailsjs错误处理

无法理解 Sailsjs 期望啥创建适配器

SailsJS,Waterline用select填充记录

MongoError:拓扑被破坏sailsjs

MongoError:拓扑被破坏sailsjs

Sailsjs:在 Sails 0.11 中,如何不使用带有套接字的 onConnect 生命周期回调