包括Node.js中另一个文件中的JavaScript类定义
我正在为Node.js编写一个简单的服务器,我正在使用自己的名为包括Node.js中另一个文件中的JavaScript类定义,javascript,node.js,Javascript,Node.js,我正在为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) {
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 */
});
我可以将我的
用户
类定义移动到另一个javascript文件并以某种方式“包含”它吗?修改您的类定义,如下所示:
exports.User = function (socket) {
...
};
var user = require('./user');
var someUser = new user.User();
然后将文件重命名为user.js
。假设它位于主脚本的根目录中,您可以像这样包含它:
exports.User = function (socket) {
...
};
var user = require('./user');
var someUser = new user.User();
这是一个又快又脏的版本。如果您想了解更多信息,请阅读。如果您将此附加到
user.js
:
exports.User = User;
require('./user.js');
export default class User {
constructor() {
...
}
}
然后在server.js
中,您可以执行以下操作:
var userFile = require('./user.js');
var User = userFile.User;
另一种方式是:
global.User = User;
那么这在server.js中就足够了:
exports.User = User;
require('./user.js');
export default class User {
constructor() {
...
}
}
您可以简单地执行以下操作:
user.js
类用户{
//...
}
module.exports=用户
server.js
const User=require('./User.js')
//实例化用户:
让用户=新用户()
这称为模块
导出多个值
有时,输出多个值可能很有用。例如,它可以是类、函数或常量。这是相同功能的替代版本:
user.js
类用户{}
exports.User=User/使用ES6,您可以拥有User.js
:
exports.User = User;
require('./user.js');
export default class User {
constructor() {
...
}
}
然后在server.js中使用它
const User = require('./user.js').default;
const user = new User();
除了这里为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);
代替myFile.js,编写类似myFile.mjs的文件。这个扩展包含了es6的所有优点,但我的意思是我向你推荐webpack和Babel,我只想指出,这里的大多数答案都不起作用,如果“module.exports.yourClass”方法一直在改变,或者如果人们输入了错误的答案,我对NodeJS和IDK是新手
// MyClass
module.exports.Ninja = class Ninja{
test(){
console.log('TESTING 1... 2... 3...');
};
}
- 这是我目前使用的方法。我喜欢这种语法,因为module.exports与类声明位于同一行,这样可以稍微清理代码。另一种方法是:
- 两种不同的语法,但最终结果相同。只是语法麻醉剂的问题
插座怎么了?应该是var someUser=new user.user(socket);假设用户有一些输入参数,比如module.exports=函数用户(数据)。然后var user=new user();是否已更改为var user=新用户(数据);?对User
是常用的js函数。您不需要在server.js中创建常量User。将users.js的最后一行更改为module.exports=new User()代码>这将在每次需要模块时创建用户的新实例。然后,您可以简单地为每个变量要求模块,如下所示:let user=require('./user.js')代码>@Barnack这里有几个我的答案。哪个是错误的,哪个是正确的?@pashaRumkin在本地实例化对象,但我得到了TypeError:不是构造函数或者得到了一个语法错误:意外的令牌导出
,当我按照您描述的那样做时。。。我有节点版本v10.16.3