Конструкторы классов не могут вызываться без 'new'

просто обновлен до узла 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 ответов


это потому, что транспилированные классы ES6 Babel не могут использоваться для расширения реального класса ES6. Если вы хотите использовать mongorito, вам придется внести в черный список Babel's es6.classes преобразуйте так, чтобы ваш Listing class также был родным классом ES6.


получается, что если вы используете es2015 preset на стороне библиотеки позволяет пользователю расширять классы, определенные на них.

.babelrc:

{
  "presets": ["es2015"]
}

Я не тестировал на mongorito, но у меня была та же проблема с расширением класса 3rd и использованием этого пресета для меня.


Транспилированные классы вызывают проблему.
Если вы используете предустановку env, вы можете исключить классы плагин такой:

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