包括Node.js中另一个文件中的JavaScript类定义

包括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) {

我正在为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 */
});

我可以将我的
用户
类定义移动到另一个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