我正在为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文件中并以某种方式“包含”它吗?
答案 0 :(得分:146)
即使你可以做到这一点
<强> user.js的强>
class User {
//...
};
module.exports = User;
<强> server.js 强>
const User = require('./user.js');
// Instantiate User:
let user = new User();
P.S。并且不要使用全局变量。它会在未来产生潜在的冲突。
答案 1 :(得分:12)
使用ES6,您可以拥有user.js
:
export default class User {
constructor() {
...
}
}
然后在server.js
const User = require('./user.js').default;
const user = new User();
答案 2 :(得分:6)
修改您的类定义,使其如下所示:
exports.User = function (socket) {
...
};
然后将文件重命名为user.js
。假设它位于主脚本的根目录中,您可以像这样包含它:
var user = require('./user');
var someUser = new user.User();
这是快速而肮脏的版本。如果您想了解更多信息,请阅读CommonJS Modules。
答案 3 :(得分:5)
除此处为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);
答案 4 :(得分: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');
答案 5 :(得分:0)
编写myFile.mjs之类的文件,而不是myFile.js。该扩展附带了es6的所有功能,但我的意思是我向您推荐webpack和Babel
答案 6 :(得分:0)
我只是想指出,这里的大多数答案都行不通,如果在整个时间里“ module.exports.yourClass”方法发生更改,或者如果人们输入了错误的答案,我对NodeJS和IDK都是陌生的。
// MyClass
module.exports.Ninja = class Ninja{
test(){
console.log('TESTING 1... 2... 3...');
};
}
//Using MyClass in seprate File
const ninjaFw = require('./NinjaFw');
let ninja = new ninjaFw.Ninja();
ninja.test();
// Ninja Framework File
class Ninja{
test(){
console.log('TESTING 1... 2... 3...');
};
}
module.exports.Ninja = Ninja;