2016-11-22 73 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(); 

作爲一個側面說明,它要開始一個大寫字母命名類的一個常見的約定,而變量(例如持有類實例)應該被命名爲以小寫字母開頭。