类构造函数不能被调用没有“新”

刚刚升级到4.1.2节点,并使用Mongorito(使用ES6)访问Mongo,我得到这个:

模型文件:

var Mongorito = require('mongorito'); var Model = Mongorito.Model; var config = require('../config/config'); Mongorito.connect(config.mongo.url); class Listing extends Model {} module.exports = Listing; 

我正在包括它:

 var Listing = require('../models/listing'); var listing = yield Listing.where('cacheKey', key).findOne(); 
 TypeError: Class constructors cannot be invoked without 'new' at Listing.Model (/node_modules/mongorito/lib/mongorito.js:140:15) at new Listing (/models/listing.js:7:14) at Query.find (/node_modules/mongorito/lib/query.js:355:21) at [object Generator].next (native) at onFulfilled (/node_modules/koa/node_modules/co/index.js:65:19) at run (/node_modules/babel/node_modules/babel-core/node_modules/core-js/modules/es6.promise.js:89:39) at /node_modules/babel/node_modules/babel-core/node_modules/core-js/modules/es6.promise.js:100:28 at flush (/node_modules/babel/node_modules/babel-core/node_modules/core-js/modules/$.microtask.js:17:13) at doNTCallback0 (node.js:408:9) at process._tickCallback (node.js:337:13) 

这是因为巴贝尔的ES6课程不能用来扩展真正的ES6课程。 如果你想使用mongorito ,你必须将es6.classeses6.classes转换成黑名单,这样你的Listing类也是一个原生的ES6类。

事实certificate,如果在库侧使用es2015预设,则允许用户扩展在其上定义的类。

.babelrc

 { "presets": ["es2015"] } 

我没有在mongoritotestingmongorito ,但是我遇到同样的问题,扩展了第三方的类,并使用这个预设解决了我。

运输class正在造成这个问题。
如果你正在使用env预设,你可以像这样排除插件:

  presets: [ ["env", { exclude: ["transform-es2015-classes"] }] ]