类构造函数不能在没有使用'new'的情况下被调用。

7

我刚刚升级到了Node 4.1.2版本,并使用支持ES6的Mongorito访问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个回答

18
这是因为Babel转码后的ES6类不能用于扩展真正的ES6类。如果您想使用,则必须黑名单化Babel的转换,以便您的类也是本地的ES6类。

谢谢。我完全忘记了我在使用 Babel。 - jabbermonkey
这是唯一可行的解决方法吗?有关于为什么会这样的文档吗? - JBCP
相关的(@loganfsmyth之前已经回答过这个问题): https://dev59.com/GFoV5IYBdhLWcg3wL8Ww - ericsoco

1
使用库侧的es2015预设可以让用户扩展其定义的类。 .babelrc
{
  "presets": ["es2015"]
}

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


0

转译的类引起了问题。
如果您正在使用 env 预设,则可以像这样排除 classes 插件:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接