Javascript 如何导出需要其他模块的模块

Javascript 如何导出需要其他模块的模块,javascript,node.js,Javascript,Node.js,我正在做一个越来越大的NodeJS项目,我正在整理我的代码。这只是一个例子 这是我的index.js: const express=require('express')) const app=express() const http=require('http')。服务器(应用程序); 常量io=require('socket.io')(http) io.on('连接',套接字=>{ socket.on('message',()=>doSomething()) }) http.listen(40

我正在做一个越来越大的NodeJS项目,我正在整理我的代码。这只是一个例子

这是我的index.js:

const express=require('express'))
const app=express()
const http=require('http')。服务器(应用程序);
常量io=require('socket.io')(http)
io.on('连接',套接字=>{
socket.on('message',()=>doSomething())
})
http.listen(4000,()=>console.log('server started'))
我想从另一个文件(比如functions.js)导入doSomething,如下所示:

函数doSomething(){
日志(io.sockets.adapter.rooms);
}
module.exports={doSomething}
修改index.js如下:

[…]
const library=require('./functions.js')
[...]
socket.on('message',()=>library.doSomething())
但当然:
io未在functions.js中定义

问题:
如何导入所需的模块以便在两个文件中共享?

您必须在
functions.js
中包含所需的包

您的
functions.js
应该是

const io = require('socket.io')(http)
//Include other packages here
function doSomething(){
  console.log(io.sockets.adapter.rooms);
}

//Other functions here

//Export all that you need to be exported
module.exports =  { doSomething }


编写
function.js
文件如下:

function doSomething(){
  let self = this;
  console.log(self.io.sockets.adapter.rooms);
}

module.exports = function (io) {
  let self = this;
  self.io = io;
  return {
    doSomething: doSomething.bind(self)
  };
};
它在
index.js
文件中的用法如下:

const Library = require('./functions.js');
const library = Library(io);

socket.on('message', () => library.doSomething())

functions.js
中的
require('socket.io')
有什么问题吗?您的答案看起来非常优雅,但是我调用
self.io=io
语句时出错,因为self是
undefined
…我声明
Library
,并且
Library
就在io声明
self
之后等于
this
,在第一个状态下,
this={}
,所以它不能被定义。你能给我看看你的密码吗@我明白了!我在
严格模式下编译functions.js
,因此
未定义。我不需要使用严格的
,所以我想我的问题已经解决了。非常感谢你!。对我来说,理解你将如何克服这个问题是很有趣的。当我使用你的代码记录
this
时,我得到了它在我看来是整个应用程序的实例……你会将
this
初始化为空对象吗?再次感谢你!我不明白你的问题。你的意思是‘在我看来是整个应用程序的实例’@ddgg