2011-08-09 26 views
45

मैं Node.js के लिए एक सरल सर्वर लिख रहा हूँ और मैं अपने ही वर्ग User जो की तरह दिखता है कहा जाता है का उपयोग कर रहा में किसी अन्य फ़ाइल से जावास्क्रिप्ट वर्ग परिभाषा सहित: में बाद मेंNode.js

function User(socket) { 
    this.socket = socket; 
    this.nickname = null; 

    /* ... just the typical source code like functions, variables and bugs ... */ 

    this.write = function(object) { 
     this.socket.write(JSON.stringify(object)); 
    } 
}; 

और उसके बाद प्रक्रिया मैं इसे एक बहुत instantiating हूँ:

var server = net.createServer(function (socket) { 
    /* other bugs */ 
    var user = new User(socket); 
    /* more bugs and bad practise */ 
}); 

मैं जावास्क्रिप्ट फ़ाइल किसी अन्य के लिए मेरे User वर्ग परिभाषा को स्थानांतरित कर सकते हैं और यह किसी भी तरह "शामिल हैं"?

उत्तर

74

और यहां तक ​​कि आप बस इस

user.js

class User { 
    //... 
}; 

module.exports = User; 

server.js

const User = require('./user.js'); 

// Instantiate User: 
let user = new User(); 
कर सकते हैं

पीएस और ग्लोबल्स का उपयोग न करें। यह भविष्य में संभावित संघर्ष पैदा करता है।

+0

क्या होगा, उपयोगकर्ता के पास कुछ इनपुट पैरामीटर थे, जैसे module.exports = function उपयोगकर्ता (डेटा)। फिर var उपयोगकर्ता = नया उपयोगकर्ता(); क्या var उपयोगकर्ता = नए उपयोगकर्ता (डेटा) में बदल दिया गया है ;? –

+0

हां। 'उपयोगकर्ता' सामान्य जेएस समारोह है। –

+2

अंत में, कुछ लाइनों में प्रकट मॉड्यूल का रहस्य !!!!! – holms

5

अपनी कक्षा परिभाषा को संशोधित इस तरह पढ़ने के लिए:

exports.User = function (socket) { 
    ... 
}; 

फिर user.js लिए फ़ाइल का नाम बदलें। मान लिया जाये कि यह आपका मुख्य स्क्रिप्ट के रूट निर्देशिका में है, तो आप इसे इस तरह शामिल कर सकते हैं:

var user = require('./user'); 
var someUser = new user.User(); 

त्वरित और गंदी संस्करण है यही कारण है कि। यदि आप और जानना चाहते हैं तो CommonJS Modules पढ़ें।

+2

सॉकेट के साथ क्या हुआ? यह varUser = नया उपयोगकर्ता var होना चाहिए। उपयोगकर्ता (सॉकेट); –

1

आप user.js को यह संलग्न हैं:

exports.User = User; 

तो server.js में आप कर सकते हैं:

var userFile = require('./user.js'); 
var User = userFile.User; 

http://nodejs.org/docs/v0.4.10/api/globals.html#require

एक और तरीका है:

global.User = User; 

तो यह server.js में पर्याप्त होगा:

require('./user.js'); 
3

ES6 का उपयोग करके आप user.js हो सकता है:

export default class User { 
    constructor() { 
    ... 
    } 
} 

और फिर ES6

के लिए
module.exports = class TEST{ 
    constructor(size) { 
     this.map = new MAp(); 
     this.size = size; 

    } 

    get(key) { 
     return this.map.get(key); 
    } 

    length() { 
     return this.map.size; 
    }  

} 

यहाँ प्रदान लोगों के अलावा server.js

const User = require('./user.js').default; 
const user = new User(); 
4

एक और तरीका में इसका इस्तेमाल करते हैं और

के समान शामिल करें
var TEST= require('./TEST'); 
var test = new TEST(1);