node.js extends foo不是一个函数

时间:2016-11-22 13:59:24

标签: node.js ecmascript-6 sequelize.js extends

我在sequelizejs旁边使用带有es6的node.js。

我的基类(base.js):

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


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

module.exports = city;

我的派生类(city.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'
                }
            });
        } 

    })
})

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

{{1}}

错误是: TypeError:city.all不是cityrest.js的函数

2 个答案:

答案 0 :(得分:4)

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

这一行基本上等同于

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

这意味着,

class city extends base {

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

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

class City extends Base {

此处类似的问题:

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

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

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

作为旁注,通常的惯例是以大写字母开头,而变量(例如持有类实例)应该以小写字母开头命名。

答案 1 :(得分:1)

要求返回一个对象 试试这个:

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