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