SailsJS - Как указать длину строкового атрибута без ошибки при создании записи?

Я использую 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
    },

Но у меня возникает ошибка всякий раз, когда я запускаю подъем парусов:

{ [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 в базе данных. Данную длину можно переопределить с помощью «размера», но это вызывает другую ошибку при создании записи.

'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

Вопрос в том, как указать размер строкового столбца (чтобы можно было использовать уникальный ключ) и не получить ошибку при создании записи?


person Febiyan    schedule 26.01.2014    source источник
comment
Я просто предполагаю, но похоже, что проблема в том, что для якоря не определено правило. галлюцинации/anchor вы можете отправить сообщение о проблеме в репозиторий привязки ?   -  person gorelative    schedule 26.01.2014
comment
Хорошо, я сделаю. Спасибо!   -  person Febiyan    schedule 29.01.2014


Ответы (2)


Вы можете обойти это, определив пользовательские правила проверки через объект типов. В частности, данную проблему можно решить, определив собственный валидатор size, который всегда возвращает true.

// 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
    }
  }
}
person marionebl    schedule 11.02.2014
comment
КТО-НИБУДЬТЕ МЕДАЛЬ ЭТОМУ ПАРНЮ! - person Febiyan; 13.02.2014

Отмеченный ответ тихий старый. Согласно последней версии парусов (1.0.2 на дату написания этого ответа),

Я использовал атрибут columnType следующим образом:

attributes: {

  longDescription: {
    type: 'string',
    columnType: 'text'
  }
}
person rahulserver    schedule 11.05.2018
comment
Мужик ты рулит!! Это у меня получилось!!! stackoverflow.com/a/50428226/3089077 - person Daniel Azamar; 19.05.2018