2013-01-03 23 views
6

gerektiriyor Ben node.js. içinde diğer js dosyalarını dahil etmeye çalışıyorum.Düğüm js ve kullanırken yeni

Ben gerektiren fonksiyonu ve diğer alternatiflerden hakkında tüm okumak ve (kod sadece hiç bir tarayıcıda, node.js üzerinde kullanılacak gibi) gerektiren fonksiyonu ile gitmeye karar verdik. Benim kod

ben sonradan bir örneğini oluşturuyorsunuz istedikleri bir 'nesne' oluşturmak için prototipler kullanıyorum.

almak için ben (diyoruz vehicle.js sağlar) Aşağıdaki gibi bir kod yazıyorum çalışır için: benim ana js Sonra

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(); 
}; 

(sağlar o server.js diyoruz), var aşağıdaki:

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(); 

Şimdi bu tüm iyi çalışır, ama ne olup bittiğini iyi bir anlayış yok.

Benim asıl sorun var test = exports; kullanılması ve daha sonra exports.Vehicle = require(...) olduğunu.

Ben sadece new Vehicle veya benzeri kullanılarak hedefiyle, var vehicle = require(...).Vehicle ve var vehicle = require(...) böyle bir şey yaptığını çalıştım, ama o iş için alamadım.

İhracat yapmak zorundayım ve eğer öyleyse neden?

Ben örnek olarak AR Drone projesini kullanıyorum Lütfen dikkat: Yukarıdaki kod onlar içten onların modülleri yapmış nasıl dayanmaktadır. Client.js ve index.js'a bakın. require ait

+0

Bu Mastering Düğüm eBook'a parametre olarak kullanmak iyidir: http://visionmedia.github.com/masteringnode/book. html – Alex

+0

@LeonidBeschastny Bu nasıl bir kopya mı? Bu soru ilk soruldu (bu sorulmuştur, 3 Temmuz 2013, bir yinelenen olduğunu iddia edildi 11 Temmuz 2013). Çift olduklarını düşünüyorsanız, diğer soru bu değil, yinelenen şeydir. – Metalskin

+0

@Metalskin özür dilerim, başlık tarafından kafam karıştı. Sorunuzu daha dikkatli bir şekilde tekrar okuyorum ve sanırım bunun yinelenen bir yanılgı oldu. –

cevap

6

sonuç sizin durumunuzda fonksiyonudur ihracat bir referans nesnesidir. Sadece sınıfın (veya başka) ile aynı adı taşıyan bir değişkene atamak ve 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

Teşekkürler Andrey, işe yaradı. Eminim ne yaptığımı bilmiyordum, düşündüğünüzü denediğimi düşündüğümden. Kafam karıştığından kuşkulanıyordum ve var araç = gerektiriyor ('./ vehicle.js'). Araç, 'Yaptığım birtakım googling yüzünden. – Metalskin