在Node.js中包含来自另一个文件的JavaScript类定义

6yjfywim  于 2023-06-04  发布在  Java
关注(0)|答案(6)|浏览(176)

我正在为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文件中并以某种方式“包含”它吗?

yyyllmsg

yyyllmsg1#

您可以简单地这样做:

user.js

class User {
  //...
}

module.exports = User // 👈 Export class

server.js

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

let user = new User()

这被称为CommonJS模块。

ES模块

从Node.js版本14开始,可以将ES模块与CommonJS一起使用。在ESM documentation中阅读更多信息。

user.mjs(👈扩展名很重要)

export default class User {}

server.mjs

import User from './user.mjs'

let user = new User()
1sbrub3j

1sbrub3j2#

使用ES6,你可以有user.js

export default class User {
  constructor() {
    ...
  }
}

然后在server.js中使用它

const User = require('./user.js').default;
const user = new User();
ar7v8xwq

ar7v8xwq3#

修改你的类定义如下:

exports.User = function (socket) {
  ...
};

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

var user = require('./user');
var someUser = new user.User();

这是快速和肮脏的版本。如果您想了解更多信息,请阅读CommonJS Modules

hmtdttj4

hmtdttj44#

除了这里为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);
yqhsw0fo

yqhsw0fo5#

如果你把这个附加到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');
swvgeqrz

swvgeqrz6#

要在Paul Rumkin答案(第一个答案)的基础上构建,您可以使用带有.js扩展的ES Modules类,并且不必使用.mjs扩展
要做到这一点,请确保您有package.json文件。如果没有,请运行以下命令来创建它:

npm init -y

package.json文件的末尾添加"type": "module"

{
 ...
 "type": "module" 
}

创建user.js文件,导出类:

export default class User {}

导入server.js中的类:

import User from './user.js'

let user = new User()

相关问题