2011-08-09 56 views
45

我正在寫Node.js的一個簡單的服務器,我用我自己的類名爲User它看起來像另一個文件Javascript類定義:包括在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)); 
    } 
}; 

,然後在後面

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

能否將User類定義到另一個javascript文件並以某種方式「包括」吧:我實例化了很多的過程?

回答

74

即使你可以簡單地做到這一點

user.js的

class User { 
    //... 
}; 

module.exports = User; 

server.js

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

// Instantiate User: 
let user = new User(); 

P.S.並且不要使用全局變量。它在未來造成潛在的衝突。

+0

,用戶有一些輸入參數,如module.exports =函數用戶(數據)。然後,var user = new User();應該改爲var user = new User(data);? –

+0

是的。 '用戶'是通常的js功能。 –

+2

終於,模塊的祕密顯示在幾行!!!!! – holms

5

修改類定義修改如下:

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

然後將文件重命名爲user.js。假設它在你的主腳本的根目錄下,你可以將其像這樣:

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

這就是快速和骯髒的版本。如果您想了解更多信息,請閱讀CommonJS Modules

+2

發生了什麼事插座?應該是var someUser = new user.User(socket);如果什麼 –

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