在Node.js中包含来自另一个文件的Javascript类定义

我正在为Node.js编写一个简单的服务器,并使用我自己的类User ,它看起来像:

 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文件,并以某种方式“包含”它?

甚至你可以简单地做到这一点

user.js的

 'use strict'; class User { //... }; module.exports = User; 

server.js

 'use strict'; const User = require('./user.js'); // Instantiate User: let user = new User(); 

PS并且不要使用全局variables。 它会在未来造成潜在的冲突。

修改你的类的定义如下所示:

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

然后将该文件重命名为user.js 假设它位于主脚本的根目录下,可以像这样包含它:

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

这是快速和肮脏的版本。 如果您想了解更多信息,请阅读CommonJS模块 。

除了这里提供的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; } } 

和包括一样

 var TEST= require('./TEST'); var test = new TEST(1); 

使用ES6,你可以有user.js

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

然后在server.js使用它

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

如果你追加到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');