我如何在node.js和socket.io中导入模块?



我是新手。io和我也学习node.js。我尝试在node.js和socket中导入一个模块。但是它不起作用。

服务器停止工作。app.js

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const counter = require('./counter');
var io = require('socket.io')(server,{});
server.listen(3000, () => {
console.log('listening on *:3000');
});
io.on('connection', function(socket)
{
counter();
});

counter.js

const counter = () => {
let time = 20;
let countdown = setInterval(update, 1000);
function update() {
let sec = time % 60;
io.sockets.emit(`${sec}`);
time--;
if (sec == 0) {
io.sockets.emit('Time is over');
clearInterval(countdown);
}
}
}
module.exports = counter

counter()在io之外工作。但我需要在里面工作。有什么解决办法吗?我不确定我应该在counter.js中导入套接字工作。

我想你的主要问题是'counter'不知道'io'是什么。尝试传入io到counter.

const counter = (io) => {  //<--- add io
let time = 20;
let countdown = setInterval(update, 1000);
function update() {
let sec = time % 60;
io.sockets.emit(`${sec}`);
time--;
if (sec == 0) {
io.sockets.emit('Time is over');
clearInterval(countdown);
}
}
}

这为计数器函数添加了一个可在函数内部访问的实参。当你调用你的'counter'函数时,我们将把io对象传递给它,这样函数就可以像这样访问这个对象:

io.on('connection', function(socket)
{
counter(io); // <--- add io
});

你可以在这里查看你想要完成的工作示例:

https://replit.com/@brandonetter OrangeredShamelessVendor # index.js

最新更新