2016-11-22 13 views
0

私はsequelizejsの横にes6でnode.jsを使用しています。node.js extends 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

Requireはオブジェクトを返します。この行は、基本的に

class city extends base { 

がクラスBase、それのインスタンスではなく拡張を意味し、

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

と同等です

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


はこれを試してみてください。 newキーワードをスキップ:ここ

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

class City extends Base { 

同様の問題:undefinedに設定されているすべてのコンストラクタのパラメータのクラスインスタンスの施工実績でカッコ()を省略

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

。この場合、これは問題ではないようですが、コードの可読性には役立ちません。代わりに、requireを分割してインスタンス化を検討:注意点として

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

(クラスのインスタンスを保持しているなど)の変数は名前を付ける必要がありながら、それは、大文字で始まる名前のクラスに共通の規則です小文字で始まる