2015-10-07 37 views
5

剛剛升級到4.1.2節點使用Mongorito(使用ES6)來訪問蒙戈和我得到這個:類的構造函數不能沒有「新」來調用

型號文件:

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) 

回答

11

這是因爲巴別塔的transpiled ES6類不能用於擴展真正ES6類。如果您想使用mongorito,則必須將Babel的es6.classes轉換爲黑名單,以便您的Listing類也是本機ES6類。

+0

謝謝。完全忘記了我在使用Babel。 – jabbermonkey

+0

是唯一的工作嗎?有沒有關於這是爲什麼的文件? – JBCP

+0

相關(@loganfsmyth已回答此問題): http://stackoverflow.com/questions/36577683/babel-error-class-constructor-foo-cannot-be-invoked-without-new – ericsoco

1

事實證明,如果您在庫側使用es2015預設值,則允許用戶擴展在其上定義的類。

.babelrc

{ 
    "presets": ["es2015"] 
} 

我沒有對mongorito測試,但我是有延伸的第三方類,並使用此預置解決了我同樣的問題。

1

傳輸的類正在引發該問題。
如果您使用的是ENV預設,可以排除插件這樣的:

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

謝謝你,幫助我很多! – Steffan

+0

可悲的是這對我不起作用。我不知道什麼是錯的。 – Noah