Javascript 如何导出需要其他模块的模块
我正在做一个越来越大的NodeJS项目,我正在整理我的代码。这只是一个例子 这是我的index.js: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
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