TypeError: Class constructor Model cannot be invoked without 'new'

项目背景

一个简单的网站,纯粹练手用的!

项目技术栈

nodejs + express + ejs + mysql2 + sequlize(orm) + vscode + babel

这是我的package.json

"dependencies": {

    "@babel/polyfill": "^7.4.4",

    "ejs": "^2.6.1",

    "express": "^4.17.1",

    "mysql2": "^1.6.5",

    "sequelize": "^5.8.8"

  },

  "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/preset-env": "^7.4.5" //问题就出在这里,这个“预设”包含很多“插件”

  }

问题追踪

class User extends Sequelize.Model {}

User.init({ ...  },{ ...  });

User.sync().then(()=>{

User.create({

    name: '...',

    password: '...',

    email: "...",

    phoneNumber: "..."

  });

});

上面User.create就报错了,错误如下:

TypeError: Class constructor Model cannot be invoked without 'new'

......省略了

我跟踪了一下,发现是babel在转换类的过程中出现了问题,于是想着如何禁止babel转换ES6的类,最后在node_modules中找到了转换ES6的插件"@babel/plugin-transform-classes"(插入一下,这个插件是我在安装预设"@babel/preset-env"的时候安装的),接下去就在.babelrc中禁用这个插件,.babelrc的配置如下:

{

    "plugins": [["@babel/plugin-proposal-class-properties",{"loose" : true}]],

    "presets": [["@babel/preset-env",  {"exclude" : ["@babel/plugin-transform-classes"]}]]

}

好了,设置好之后,就不会进行ES6类的装换了,接下去可以愉快的玩了!


补充一下,这个可能不是唯一方法,网上有人说可以退回到2015这个预设,我没有去尝试,因为2015已成过去,我们用babel的其中一个目的就是为了能过使用ES的最新语法,带来编程的快感并且与未来接轨!

你可能感兴趣的:(TypeError: Class constructor Model cannot be invoked without 'new')