0

Strateji Desen: interfaceBridge.jsTypeError: Class.function, Object'te bir işlev değil. <anonymous>

// START IMPORT NODE HUE API 
    var hue = require("node-hue-api"), 
    HueApi = hue.HueApi, 
    lightState = hue.lightState; 
    var displayResult = function(result) { 
     console.log(result); 
    }; 

    var displayError = function(err) { 
     console.error(err); 
    }; 


    var host = "192.168.2.129", 
    username = "033a6feb77750dc770ec4a4487a9e8db", 
    api = new HueApi(host, username), 
    state = lightState.create(); 

// END IMPORT NODE HUE API 

var Bridges = function() { 
    this.bridge = ""; 
}; 

Bridges.prototype = { 
    setBridge: function(bridge){ 
     this.bridge = bridge; 
    }, 

    showAllLights: function() { 
    }, 

    getStatusOfLamp: function(id){ 
    }, 

    setLightState: function(id, state){ 
    } 

}; 

var Phue = function() { 
    this.showAllLights = function() { 
     api.lights(function(err, lights) { 
     if (err) throw err; 
     displayResult(lights); 
     }); 
    }, 
    this.getStatusOfLamp = function(id){ 
     api.lightStatus(id, function(err, result) { 
     if (err) throw err; 
     displayStatus(result); 
     }); 
    }, 
    this.setLightState = function(id, state){ 
     if(state == 'on'){ 
     api.setLightState(id, state.on(), function(err, result) { 
      if (err) throw err; 
      displayResult(result); 
     }); 
     } else { 
     api.setLightState(id, state.off(), function(err, result) { 
      if (err) throw err; 
      displayResult(result); 
     }); 
     } 

    } 
}; 

var Wemo = function() { 
    this.showAllLights = function() { 
     //@String from Belkin WeMo API 
    }, 
    this.getStatusOfLamp = function(id){ 
     //@String from Belkin WeMo API 
    }, 
    this.setLightState = function(id, state){ 

    } 
}; 

var TcpConnect = function() { 
    this.showAllLights = function() { 
     //@String from TCP Connect API 
    }, 
    this.getStatusOfLamp = function(id){ 
     //@String from TCP Connect API 
    }, 
    this.setLightState = function(id, state){ 

    } 
}; 

module.exports = { 
    Bridges: Bridges, 
    Phue: Phue, 
    Wemo: Wemo, 
    TcpConnect: TcpConnect 
}; 

server.js

var express = require('express'); 
var app = express(); 
var fs = require("fs"); 
var Bridges = require("./interfaceBridge.js").Bridges; 
var Phue = require("./interfaceBridge.js").Phue; 
var Wemo = require("./interfaceBridge.js").Wemo; 
var Tcpconnect = require("./interfaceBridge.js").TcpConnect; 

// Initialising of objects 

var bridges = Bridges; 
var phue = Phue; 
var wemo = Wemo; 
var tcpconnect = Tcpconnect; 
bridges.setBridge(phue); 



var PORT = 4333; 
app.get('/lights/all', function (req, res) { 
    bridges.showAllLights(); 
}); 

app.get('/lights/:id/state', function (req, res) { 
    var id= req.params.id; 

    bridges.getStatusOfLamp(id); 
}); 

app.get('/lights/:id/state/:state', function (req, res) { 
    var id = req.params.id; 
    var state; 

    bridges.setLightState(id, state); 
}); 
var server = app.listen(PORT, function() { 

    var host = server.address().address; 
    var port = server.address().port; 

    console.log("Example app listening at http://%s:%s", host, port); 

}); 

aşağıdaki hatayı alma.

TypeError: bridges.setBridge is not a function 
    at Object.<anonymous> (/Users/jensgryspeert/Documents/STAGE/Raspberry Rest API/server.js:12:9) 
    at Module._compile (module.js:425:26) 
    at Object.Module._extensions..js (module.js:432:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:311:12) 
    at Function.Module.runMain (module.js:457:10) 
    at startup (node.js:136:18) 
    at node.js:972:3 

Sorunun ne olduğunu bulamıyorum. Umarım birisi bana yardım edebilir. Köprülerin benim arayüzüm olduğu Strateji modeline dayanıyor. Alt sınıfı kullanan sınıflar, Phue, Wemo ve TcpConnect'dir. Bazı sebeplerden dolayı benimkini göremez. Hatta bunlar bile sunucu.js'ye eklenir.

+0

'var köprüler:

modules.exports = { Bridges: Bridges, Phue: Phue, Wemo: Wemo, TcpConnect: TcpConnect }; 

veya

exports.Bridges = Bridges; exports.Phue = Phue; exports.Wemo = Wemo; exports.TcpConnect = TcpConnect; 

Sonra server.js yılında gerektirir: interfaceBridge.js yılında Sen gibi dış ;function(){...}(); ve ihracat sayabilirsiniz = Köprüler, nesnelerin başlatılması gibi görünmüyor. Belki de 'yeni Bridges() 'olmalıdır. –

cevap

0

O modules.exports garip bir kullanım var.

var Bridges = require("./interfaceBridge.js").Bridges; 
var Phue = require("./interfaceBridge.js").Phue; 
var Wemo = require("./interfaceBridge.js").Wemo; 
var TcpConnect = require("./interfaceBridge.js").TcpConnect; 
+0

Yazmış gibi @ madox2 Ben hala aynı sorunu alıyorum. –

+1

Bunu kullanmak gerekir gibi var köprüler = yeni Köprüler () –

+0

Çalışıyor, teşekkürler. –

0

Sınıf yerine Bridges örneğini dışa aktarıyorsunuz.

module.exports = new Bridges(); // exporting instance of Bridges 

Onun yerine bir sınıf/işlevi dışa olmalıdır:

module.exports = Bridges; 

GÜNCELLEME: ayrıca doğru/ithalat ihracat gerekir. Her modül için sadece bir nesne dışa aktarabilirsiniz. Örnekte size fonksiyonlarının tümünü içeren bir nesne verebilirsiniz:

module.exports = { 
    Bridges: Bridges, 
    Phue: Phue, 
    Wemo: Wemo, 
    TcpConnect: TcpConnect 
}; 

ve yeniden içe:

var Bridges = require("./interfaceBridge.js").Bridges; 
var Phue = require("./interfaceBridge.js").Phue; 
var Wemo = require("./interfaceBridge.js").Wemo; 
var Tcpconnect = require("./interfaceBridge.js").TcpConnect; 
+0

Değiştirildi. Hala aynı hatayı alıyor. –

+0

@JensXel, tüm ihracatlarınız için onu değiştirmeye çalışın ve kendi kendini yürütme işlevinin dışında çalıştırın ((; (function() {... ') – madox2

+0

Başladığım gönderiyi şimdi elime geçirdim Hala aynı hata ben alır.Onarım –

İlgili konular