Sequelize пять 5, Вавилон семь 7: TypeError: конструктор класса Модель не может быть вызвана без 'new' - PullRequest
1 голос
/ 28 июня 2019

Я пишу новое приложение с помощью nodejs / express / sequelize. Я использую Babel 7 для компиляции ES6. Пока что все отлично работает с sequelize, кроме случаев, когда я хочу использовать метод removeHook . Я получаю эту ошибку, когда использую removeHook на экземпляре .

/home/xxxx/PhpstormProjects/some-project/node_modules/lodas/lodash.js:15709
              var result = object(this.__wrapped__),
                           ^

TypeError: Class constructor Model cannot be invoked without 'new'
    at self.object.(anonymous function) [as removeHook] (/home/xxxx/PhpstormProjects/some-project/node_modules/lodash/lodash.js:15709:28)
    at removeHook (/home/xxxx/PhpstormProjects/some-project/src/controllers/user.js:44:22)
    at callback (/home/xxxx/PhpstormProjects/some-project/src/util/loginStrategy.js:9:18)

Я знаю, что эта проблема исходит от Вавилона. Сначала я использовал Babel 6, но у меня была та же проблема. Я перепробовал все доступное на GitHub, и лучшим решением было следующее .babelrc, но все равно я получаю ту же ошибку. Кроме того, я обновил lodash без эффекта. Я пытался babel-plugin-lodash безрезультатно.

.babelrc

{
  "plugins": ["lodash"],
  "presets": [
    ["@babel/env", {
      "targets": {
        "node": "10.16.0"
      }
    }]
  ]
}

package.json

{
  "name": "xxxxxxxxxxx",
  "version": "0.0.0",
  "private": true,
  "scripts": {
    "start": "sessionSecret=lool nodemon ./app.js --exec babel-node -e js"
  },
  "dependencies": {
    "bcrypt": "^3.0.6",
    "body-parser": "^1.19.0",
    "connect-pg-simple": "^5.0.0",
    "cookie-parser": "~1.4.4",
    "debug": "~2.6.9",
    "express": "~4.16.1",
    "express-session": "^1.16.2",
    "fs": "0.0.1-security",
    "lodash": "^4.17.11",
    "lodash-es": "^4.17.11",
    "nodemon": "^1.19.1",
    "pg": "^7.11.0",
    "sequelize": "^5.8.12",
    "sequelize-cli": "^5.5.0",
    "uuid": "^3.3.2"
  },
  "devDependencies": {
    "@babel/cli": "^7.4.4",
    "@babel/core": "^7.4.5",
    "@babel/node": "^7.4.5",
    "@babel/plugin-proposal-class-properties": "^7.4.4",
    "@babel/plugin-transform-classes": "^7.4.4",
    "@babel/plugin-transform-runtime": "^7.4.4",
    "@babel/preset-env": "^7.4.5",
    "babel-eslint": "^10.0.2",
    "babel-plugin-lodash": "^3.3.4",
    "babel-preset-latest-node": "^3.2.1",
    "eslint": "^5.16.0",
    "eslint-config-airbnb-base": "^13.1.0",
    "eslint-plugin-import": "^2.18.0"
  }
}


Версия узла

v10.16.0

Я видел другие ответы, но они не решили мою проблему. Большинство из них действительно старые. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

1 Ответ

0 голосов
/ 29 июня 2019

Я решил свою проблему.Оказывается, я не могу использовать removeHook на экземплярах.Я должен был использовать модели.Это большая проблема с документацией Sequelize.Вот что я нашел.

Экземпляр и методы класса были удалены с v4.Смотрите здесь (это 404). Кроме того, ваш хук beforeUpdate обновляет пользователя асинхронно.Вы должны вернуть обещание, чтобы sequelize знал, что ему нужно дождаться, пока ваш хук завершит выполнение своей задачи и обновит пользователя.

...