При попытке использовать Sequelize JS v4 с классами ES6 у меня возникают проблемы с выполнением методов экземпляра.По какой-то причине они, похоже, не существуют, хотя и определены в коде.
Вот пример -
Файл модели
'use strict';
const Sequelize = require("sequelize");
class Model extends Sequelize.Model {
static init(sequelize, DataTypes) {
return super.init(
{
// properties
},
{ sequelize }
);
}
static associate(models) {
}
async modelMethod() {
}
}
module.exports = Model;
Инициирование модели
let modelClass = require('../models/' + modelFile);
let model = modelClass.init(sequelize, Sequelize);
Затем модель вызывается в файле контроллера как свойство контроллера
async controllerMethod(req, res) {
let info = await this.model.modelMethod();
res.send(info);
}
И ошибка, которую я получаю -
TypeError: this.model.modelMethodне является функцией в Controller.controllerMethod (/usr/app/controllers/controller.js:83:41) в Layer.handle [как handle_request] (/usr/app/node_modules/express/lib/router/layer.js:95: 5) в следующем (/usr/app/node_modules/express/lib/router/route.js:137:13) в Route.dispatch (/usr/app/node_modules/express/lib/router/route.js:112: 3) в Layer.handle [как handle_request] (/usr/app/node_modules/express/lib/router/layer.js:95:5) в / usr / app / node_modules / express / lib / router / index.js: 281: 22 в параметре (/usr/app/node_modules/express/lib/router/index.js:354:14) в параметре (/usr/app/node_modules/express/lib/router/index.js:365: 14) в парам(/usr/app/node_modules/express/lib/router/index.js:365:14) в Function.process_params (/usr/app/node_modules/express/lib/router/index.js:410:3) в следующем(/usr/app/node_modules/express/lib/router/index.js:275:10) в sequelize.models.Session.findOne.then (/usr/app/app.js:44:24) в tryCatcher (/usr / app / node_modules / bluebird / js / release / util.js: 16: 23) в Promise._settlePromiseFromHandler (/usr/app/node_modules/bluebird/js/release/promise.js:512:31) в Promise._settlePromise(/usr/app/node_modules/bluebird/js/release/promise.js:569:18) в Promise._settlePromise0 (/usr/app/node_modules/bluebird/js/release/promise.js:614:10) в Promise._settlePromises (/usr/app/node_modules/bluebird/js/release/promise.js:693:18) в Async._drainQueue (/usr/app/node_modules/bluebird/js/release/async.js:133:16)в Async._drainQueues (/usr/app/node_modules/bluebird/js/release/async.js:143:10) в Immediate.Async.drainQueues (/usr/app/node_modules/bluebird/js/release/async.js:17:14) в Immediate.args. (Анонимная функцияion) [as _onImmediate] (/usr/local/lib/node_modules/pm2/node_modules/event-loop-inspector/index.js:133:29) в runCallback (timers.js: 810: 20)
Попытка вывести методы классов дает это -
console.log(Object.getOwnPropertyNames(this.model));
[ 'length',
'prototype',
'init',
'associate',
'name',
'sequelize',
'options',
'associations',
'underscored',
'tableName',
'_schema',
'_schemaDelimiter',
'rawAttributes',
'primaryKeys',
'_timestampAttributes',
'_readOnlyAttributes',
'_hasReadOnlyAttributes',
'_isReadOnlyAttribute',
'_dataTypeChanges',
'_dataTypeSanitizers',
'_booleanAttributes',
'_dateAttributes',
'_hstoreAttributes',
'_rangeAttributes',
'_jsonAttributes',
'_geometryAttributes',
'_virtualAttributes',
'_defaultValues',
'fieldRawAttributesMap',
'fieldAttributeMap',
'uniqueKeys',
'_hasBooleanAttributes',
'_isBooleanAttribute',
'_hasDateAttributes',
'_isDateAttribute',
'_hasHstoreAttributes',
'_isHstoreAttribute',
'_hasRangeAttributes',
'_isRangeAttribute',
'_hasJsonAttributes',
'_isJsonAttribute',
'_hasVirtualAttributes',
'_isVirtualAttribute',
'_hasGeometryAttributes',
'_isGeometryAttribute',
'_hasDefaultValues',
'attributes',
'tableAttributes',
'primaryKeyAttributes',
'primaryKeyAttribute',
'primaryKeyField',
'_hasPrimaryKeys',
'_isPrimaryKey',
'autoIncrementAttribute',
'_scope',
'_scopeNames' ]