2013-01-03 17 views
6

Próbuję posortować uwzględnienie innych plików js w węźle.js.Węzły js i nowe podczas używania wymagają

Przeczytałem wszystko o funkcji wymagającej i innych alternatywach i zdecydowałem się użyć funkcji wymagającej (ponieważ kod będzie używany tylko w węźle node.js, a nie w przeglądarce).

W moim kodzie używam prototypów do tworzenia "obiektu", który później chciałbym stworzyć z offu.

Aby zmusić go do pracy byłem pisania kodu jak poniżej (nazwijmy go vehicle.js):

var util = require('util'); 
var EventEmitter = require('events').EventEmitter; 

module.exports = Vehicle; 

util.inherits(Vehicle, EventEmitter); 

function Vehicle(options) { 
    EventEmitter.call(this); 
    options = options || {}; 
    ... 
} 

Vehicle.prototype._doStartEvent = function(data) { 
    this.emit('start', data); 
}; 

Vehicle.prototype.testRun = function() { 
    this._doStartEvent(); 
}; 

Następnie w moich głównych js (pozwala wywołać server.js), mam co następuje:

var test = exports; 
exports.Vehicle = require('./vehicle.js'); 

var remoteVehicle = new test.Vehicle({address: "192.168.1.3"}); 

remoteVehicle.on('start', function(d) {console.log('started');}); 

remoteVehicle.testRun(); 

Teraz wszystko działa dobrze, ale nie mam dobrego zrozumienia tego, co się dzieje.

Moim głównym zmartwieniem jest użycie var test = exports;, a następnie exports.Vehicle = require(...).

Próbowałem po prostu zrobić coś takiego, jak var vehicle = require(...).Vehicle i var vehicle = require(...), z celem tylko użycie new Vehicle lub podobnym, ale nie mogłem go uruchomić.

Czy jestem zmuszony korzystać z eksportu, a jeśli tak, dlaczego?

Uwaga! Jako przykład wykorzystałem projekt AR Drone, powyższy kod jest oparty na sposobie, w jaki wykonał on swoje moduły wewnętrznie. Patrz: Client.js i .

+0

Ten Mastering Node eBook jest dobra: http://visionmedia.github.com/masteringnode/book. html – Alex

+0

@LeonidBeschastny Jak to jest duplikatem? To pytanie zostało zadane w pierwszej kolejności (zostało to zadane 3 stycznia 2013 r., A ten, o którym twierdzisz, że jest duplikatem, został zadany 11 lipca 2013 r.). Jeśli uważasz, że są duplikaty, to drugie pytanie jest duplikatem, a nie tym. – Metalskin

+0

@Metalskin przepraszam, byłem zdezorientowany tytułem. Ponownie przekierowuję twoje pytanie bardziej uważnie i myślę, że myliłem się, że to duplikat. –

Odpowiedz

6

wynikiem require jest odniesienie do obiektu eksportu, który działa w twoim przypadku. Wystarczy przypisać do zmiennej o tej samej nazwie jak klasa (lub jakikolwiek inny) i używać jako parametr do new

var Vehicle = require('./vehicle.js'); 

var remoteVehicle = new Vehicle({address: "192.168.1.3"}); 

remoteVehicle.on('start', function(d) {console.log('started');}); 

remoteVehicle.testRun(); 
+0

Dzięki Andrey, to działało. Nie jestem pewien, co teraz robię, to nie działa, ponieważ myślałem, że próbowałem tego, co sugerujesz. Podejrzewam, że się myliłem i robiłem 'var Vehicle = require ('./ vehicle.js'). Vehicle;' z powodu trochę googlowania, które robiłem. – Metalskin

Powiązane problemy