2015-10-07 4 views
5

Tylko przeniesieni do węzła 4.1.2 i przy użyciu Mongorito (który używa ES6), aby uzyskać dostęp do Mongo, a ja dostaję to:konstruktorzy klasa nie może być wywołany bez 'nowych'

plik Model:

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; 

a ja w tym go:

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) 

Odpowiedz

11

to dlatego transpiled klas ES6 Babla nie może być stosowany w celu rozszerzenia prawdziwą klasę ES6. Jeśli chcesz użyć mongorito, musisz umieścić na czarnej liście transformację Babel es6.classes, aby twoja klasa Listing była również natywną klasą ES6.

+0

Dzięki. Całkowicie zapomniałem, że używałem Babel. – jabbermonkey

+0

czy to jedyna praca dookoła? Czy istnieje jakakolwiek dokumentacja dotycząca tego, dlaczego tak się dzieje? – JBCP

+0

Powiązane (@loganfsmyth odpowiedział na to wcześniej): http://stackoverflow.com/questions/36577683/babel-error-class-constructor-foo- cannon-be-invoked-without-new – ericsoco

1

Okazuje się, że jeśli użyjesz ustawienia es2015 po stronie biblioteki, użytkownik może rozszerzyć zdefiniowane na nich klasy.

.babelrc:

{ 
    "presets": ["es2015"] 
} 

Nie testowany na mongorito, ale miałem ten sam problem rozszerzenie 3rd klasę partii i przy użyciu tego presetu rozwiązać dla mnie.

1

Klasy nieostre są przyczyną problemu.
Jeśli używasz preset env można wykluczyć klas wtyczki tak:

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

Dziękuję, pomógł mi dużo ! – Steffan

+0

Niestety to nie działa dla mnie. Zastanawiam się, co jest nie tak. – Noah