2011-08-09 150 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);