【问题标题】:node.js extends foo is not a functionnode.js 扩展 foo 不是一个函数
【发布时间】:2016-11-22 22:31:44
【问题描述】:

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

我的基类(base.js):

class base {

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

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

我的派生类(city.js):

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


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

module.exports = city;

派生类的用法(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'
                }
            });
        } 

    })
})

错误是:TypeError: city.all is not a function at cityrest.js

【问题讨论】:

  • var base = new require('../base'); 真的有用吗?您如何公开 Base - 代码中没有 export 或 module.exports。你可能想执行var base = new (require('../base'))

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


【解决方案1】:
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();

附带说明一下,命名类以大写字母开头是一种常见约定,而变量(例如,保存类实例)应以小写字母开头。

【讨论】:

    【解决方案2】:

    Require 返回一个对象。
    试试这个:

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

    【讨论】:

      猜你喜欢
      • 2016-09-15
      • 2016-09-10
      • 2019-03-12
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-03
      相关资源
      最近更新 更多