没有' new'不能调用类构造函数。

时间:2015-10-07 00:44:26

标签: node.js mongodb ecmascript-6

刚升级到节点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)

3 个答案:

答案 0 :(得分:17)

这是因为Babel的转换ES6类不能用于扩展真正的ES6类。如果您想使用mongorito,则必须将Babel的es6.classes转换列入黑名单,以便您的Listing课程也是原生ES6课程。

答案 1 :(得分:1)

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

<强> .babelrc

{
  "presets": ["es2015"]
}

我没有在mongorito上进行测试,但我在扩展第三方课时遇到了同样的问题,并且使用了这个预设解决了我。

答案 2 :(得分:0)

透明的课程导致了这个问题 如果您使用的是env预设,则可以排除 classes 插件,如下所示:

{{1}}