gpt4 book ai didi

node.js - 导入另一个文件时 module.exports 未定义

转载 作者:搜寻专家 更新时间:2023-10-31 22:34:17 24 4
gpt4 key购买 nike

这是我的简单 Express 应用的文件结构。

server/
|- models
|--- users.js
|- index.js

index.js 是入口点

const app = require('express')();
const Server = require('http').createServer(app)
const io = require('socket.io')(Server);
......
.....
.....
.....
....
module.exports = {
Server,
io
}

在我的 models/users.js 中,我需要上面导出的 io 变量,以便在添加新用户时向所有连接的客户端发出一些事件。为此我导入了

const { io } = require('../index');

但是 ioundefined。我尝试过其他一些类似的方法

const io = require('../index').io // 

const io = require('../').io /index is useless on require

但都没有用。我是在傻还是在这里错过了什么。任何帮助将不胜感激。

谢谢

最佳答案

这是一个问题:

以正确的顺序导入

SlaWitDev 关于 const socketIOEvents = require('./socketIOEvents'); 行的说法是正确的成为问题的一部分。

这是一个实例化 users.js 的文件.关于 users.js 的实例化,您正在包括您在实例化过程中的文件。换句话说,我们还没有触及 index.js 中代码行的底部。 , 用于导出 io反对那个文件。

index.js -> socketIOEvents/index.js -> models/index.js , -> models/users.js

检查订单

我在这些文件的顶部添加了一行代码,以便在它们被调用时进行记录,然后在 module.exports 之前添加一行代码在index.js文件:

[nodemon] starting `node server`
index.js
socketIOEvents/index.js
models/index.js
models/users.js
Initializing routes
index.js module.exports assignment
Server is running on port 9000.

如您所见,user.js 我们导出模块之前被调用。

检查导入的对象

由于前面的问题,如果我们在 users.js 中添加这一行:

const test = require('../index');
console.log('test', test);

我们得到输出:

test {}

这意味着我们导入的对象没有任何键,所以在你拉出 io 的地方执行对象解构键入:

const { io } = require('../index');

不会工作。

解决方案:

如果我们移动 module.exports行和 const io在线 index.js到上面的 socketIOEvents,你会看到它开始工作:

...
const config = require('./config');

// start socket.io
const io = require('socket.io')(Server);

module.exports = {
Server,
io
};

const socketIOEvents = require('./socketIOEvents');
...

请注意,这可能是一个反模式,而不是最终解决方案,因为 module.exports 通常位于文件末尾。

替代解决方案:

  • 通过 io在 socketIOEvents 中进入你的模型,就像你将它作为参数传递到函数中一样,将它传递到你的 socketIOEvents 文件中。

  • 实例 io在一个单独的文件中,服务器被传递到其中。在主要 index.js 中使用此引用文件和 users.js文件

关于node.js - 导入另一个文件时 module.exports 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49519200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com