类构造函数不能被调用没有“新”
刚刚升级到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.classes
的es6.classes
转换成黑名单,这样你的Listing
类也是一个原生的ES6类。
事实certificate,如果在库侧使用es2015预设,则允许用户扩展在其上定义的类。
.babelrc
:
{ "presets": ["es2015"] }
我没有在mongorito
testingmongorito
,但是我遇到同样的问题,扩展了第三方的类,并使用这个预设解决了我。
运输class正在造成这个问题。
如果你正在使用env预设,你可以像这样排除类插件:
presets: [ ["env", { exclude: ["transform-es2015-classes"] }] ]