node.js extends foo 不是函数

node.js extends foo is not a function

我在 sequelizejs 旁边使用 node.js 和 es6。

我的基地class(base.js):

class base {

    constructor(table) {
        this._table = table;
    }

    all(query) {
        this._table.findAll({
        }).then(function (dbStatus) {
            return new Promise((resolve, reject) => {
                resolve(dbStatus);
            })
        });
    };
}

我的派生class (city.js):

var util = require('util');
var base = new require('../base');


class city extends base {
   constructor() {
    super(db.city);
  }
}

module.exports = city;

派生的用法 class (cityrest.js) :

var city = new require('../../dataBaseOperations/city')
var app = express();

app.get('/all', function (req, res, next) {
    city.all(req.query, function (result, resultData) {
        if (result) {
            res.json({
                data: {
                    success: result,
                    content: resultData,
                    message: 'messageContent'
                }
            });
        } 

    })
})

错误是:类型错误:city.all 不是 cityrest.js

处的函数

需要returns一个对象。
试试这个:

var City = require('../../dataBaseOperations/city')
var city = new City()
var base = new require('../base');

这一行基本等同于

var Base = require('../base');
var base = new Base(undefined);

也就是说,

class city extends base {

不是 class Base 的扩展,而是它的一个实例。跳过 new 关键字:

var Base = require('../base');

class City extends Base {

这里有类似的问题:

var city = new require('../../dataBaseOperations/city')

在 class 实例构造中省略括号 () 会导致所有构造函数参数设置为 undefined。在这种情况下这似乎不是问题,但不利于代码的可读性。相反,考虑拆分 require 和实例化:

var City = require('../../dataBaseOperations/city');
var city = new City();

作为旁注,命名 classes 以大写字母开头是常见的约定,而变量(例如持有 class 个实例)应以小写字母开头命名.