2016-11-22 3 views
0

Ich benutze node.js mit es6 neben sequelizejs.node.js erweitert foo ist keine Funktion

My Basisklasse (base.js):

class base { 

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

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

My abgeleiteten Klasse (city.js):

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


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

module.exports = city; 

Verwendung der abgeleiteten Klasse (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' 
       } 
      }); 
     } 

    }) 
}) 

Fehler ist: TypeError: city.all ist keine Funktion bei cityrest.js

+0

Ist das 'var base = new require (' ../ base '); 'Wirklich? Wie Sie ** Base ** bereitstellen - es gibt keine Exporte oder Module.exports im Code. Wahrscheinlich möchten Sie 'var base = new (require ('../ base'))' 'ausführen –

Antwort

1

Require gibt ein Objekt zurück.
Versuchen Sie folgendes:

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

Diese Linie zu

im Grunde gleichwertig ist
var Base = require('../base'); 
var base = new Base(undefined); 

Das heißt,

class city extends base { 

Base, sondern eine Instanz davon nicht die Klasse erweitert. Überspringen Sie das new Stichwort:

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

class City extends Base { 

ähnliches Problem hier:

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

Weglassen die Klammern () bei einer Klasseninstanz Konstruktion führt in allen Konstruktorparameter auf undefined. Dies scheint in diesem Fall kein Problem zu sein, trägt jedoch nicht zur Lesbarkeit Ihres Codes bei. Stattdessen betrachten die require Spaltung und die Instanziierung:

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

Als Randbemerkung, es ist eine gemeinsame Konvention Klassen Namen mit einem Großbuchstaben beginnen, während Variablen (zB Halteklasseninstanzen) genannt werden soll, beginnend mit einem Kleinbuchstaben.

Verwandte Themen