2016-11-22 103 views
0

我在sequelizejs旁边用es6使用node.js。node.js扩展foo不是函数

我的基类(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不是cityrest.js的功能

+0

这是'var base = new require('../ base');'真的有用吗?如何暴露** Base ** - 代码中没有导出或module.exports。你可能想执行'var base = new(require('../ base'))'' –

回答

1

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

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

这条线基本上等同于

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(); 

作为一个侧面说明,它要开始一个大写字母命名类的一个常见的约定,而变量(例如持有类实例)应该被命名为以小写字母开头。