Я только что создал новый проект [GitHub] с yarn create strapi-app
для тестирования методов жизненного цикла модели. Я делаю поле для чтения и записи один раз под названием number_of_onsite_lessons
. Я хочу иметь поле, в котором пользователь может указать, сколько Onsine Lessons должно быть сгенерировано при создании Onsite Course, а затем отключить это поле - или, по крайней мере, выдать ошибку, когда они пытаются изменить его значение.
To С этой целью я написал метод жизненного цикла OnsiteCourse:
// Before updating a value.
// Fired before an `update` query.
beforeUpdate: async (model, attrs, options) => {
const prev = await strapi.query("onsite-course").findOne({_id: model.id});
console.log(prev,model);
if (prev.number_of_onsite_lessons != model.number_of_onsite_lessons) {
throw new Error("Can't change number of lessons - delete or create onsite lessons instead.")
}
if (prev.number_of_onsite_projects != model.number_of_onsite_projects) {
throw new Error("Can't change number of projects - delete or create onsite projects instead.")
}
},
Когда я обновляю сущность OnsiteCourse, код запускается, но останавливается на await strapi.query("onsite-course").findOne({...})
и затем зависает на неопределенный срок. Я не получаю ошибку, и при этом я не получаю тот console.log на следующей строке.
Через некоторое время эта ошибка появляется в консоли:
[2020-03-17T07:42:30.558Z] error TimeoutError: Knex: Timeout acquiring a connection. The pool is probably full. Are you missing a .transacting(trx) call?
at Bluebird.try.then.catch (/home/teri/projects/strapi/new/node_modules/knex/lib/client.js:318:17)
at tryCatcher (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/util.js:16:23)
at /home/teri/projects/strapi/new/node_modules/bluebird/js/release/catch_filter.js:17:41
at tryCatcher (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/promise.js:547:31)
at Promise._settlePromise (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/promise.js:604:18)
at Promise._settlePromise0 (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/promise.js:649:10)
at Promise._settlePromises (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/promise.js:725:18)
at _drainQueueStep (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/async.js:93:12)
at _drainQueue (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/async.js:86:9)
at Async._drainQueues (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/async.js:102:5)
at Immediate.Async.drainQueues [as _onImmediate] (/home/teri/projects/strapi/new/node_modules/bluebird/js/release/async.js:15:14)
at processImmediate (internal/timers.js:443:21)