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

mar*_*tin 95 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) {
        this.socket.write(JSON.stringify(object));
    }
};
Run Code Online (Sandbox Code Playgroud)

然后在这个过程中我会实例化它:

var server = net.createServer(function (socket) {
    /* other bugs */
    var user = new User(socket);
    /* more bugs and bad practise */
});
Run Code Online (Sandbox Code Playgroud)

我可以将我的User类定义移动到另一个javascript文件并以某种方式"包含"它吗?

Pau*_*kin 165

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

user.js的

class User {
    //...
}

module.exports = User
Run Code Online (Sandbox Code Playgroud)

server.js

const User = require('./user.js')

// Instantiate User:
let user = new User()
Run Code Online (Sandbox Code Playgroud)

PS并且不要使用全局变量.它会在未来产生潜在的冲突.

  • 您无需在server.js中创建常量User。将users.js的最后一行更改为“ module.exports = new User();”,这将在每次需要该模块时创建一个新的User实例。然后,您可以像这样简单地为每个变量要求模块:`let user = require('./ user.js');`。 (2认同)

yed*_*yak 13

使用ES6,您可以user.js:

export default class User {
  constructor() {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它 server.js

const User = require('./user.js').default;
const user = new User();
Run Code Online (Sandbox Code Playgroud)


sev*_*low 6

将您的类定义修改为如下所示:

exports.User = function (socket) {
  ...
};
Run Code Online (Sandbox Code Playgroud)

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

var user = require('./user');
var someUser = new user.User();
Run Code Online (Sandbox Code Playgroud)

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

  • 套接字怎么了?应该是var someUser = new user.User(socket); (2认同)

Gau*_*wat 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;
    }    

}
Run Code Online (Sandbox Code Playgroud)

并包括相同的

var TEST= require('./TEST');
var test = new TEST(1);
Run Code Online (Sandbox Code Playgroud)