我希望能够在多个.js文件中编写函数,并使用在主server.js中创建的相同套接字
server.js:
var express = require('express')
var app = express()
var http = require('http')
var server = http.createServer(app)
var io = require('socket.io')(server)
var GOR = require('./gor')
var path = require('path');
app.use(express.static(path.join(__dirname, '/public')));
//handles get request and serves index.html
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/index.html');
});
//wait for server to start
server.listen(8080,()=>{
console.log("server started");
setInterval(emit_data,5000);
emit_data();
//setInterval(GOR.send_from_another_js,5000);
//GOR.send_from_another_js(io);
})
function emit_data(){
io.emit( 'update', "webserver.js");
}
从上面的代码中可以看到,我有一个函数,它每5秒向socket发出一次,并且运行良好。我已经确认了它。
我现在要做的就是创建一个单独的. js文件,并将我的所有函数保存在那里,以使代码看起来更简洁。我将另一个.js文件命名为戈尔:
gor.js:
//I want to call this function in my webserver.js and transmit this socket
function send_from_another_js(io){
console.log("function called");
io.emit( 'update', "another_js");
}
module.exports = {
send_from_another_js
}
当我在server.js中调用此函数时,它不起作用:
server.listen(8080,()=>{
console.log("server started");
setInterval(GOR.send_from_another_js,5000);
GOR.send_from_another_js(io);
})
在其他.js文件中使用相同的.io的正确方法是什么?以上方法不起作用。
编辑1
在my .html中,我等待socket上的消息:
window.addEventListener('DOMContentLoaded', () => {
socket.on('update', function(number_to_set) {
console.log("socket update received");
document.getElementById('number1').innerHTML = number_to_set;
});
var button = document.getElementById("operation_code_button");
button.addEventListener("click", function(event){
var val = document.getElementById("operation_code_input").value;
console.log("socket clicked, emmiting data");
socket.emit('button_click',val);
});
})
在我的.js文件中,我每5秒向这个套接字发出一次:
server.listen(8080,()=>{
console.log("server started");
setInterval(emit_data,5000);
emit_data();
})
5秒钟后,我可以看到我的网页更新数据,所以一切工作!!!
我想在另一个.js文件中声明emit_data函数,并在我的主.js文件中使用它。
我的辅助.js文件(戈尔.js)中的函数:
function send_from_another_js_1(io){
io.emit( 'update', data);
}
我想在main.js中调用它,就像调用emit_data一样
3条答案
按热度按时间j5fpnvbx1#
您需要等待服务器初始化。您在www.example.com准备好之前调用了您的函数socket.io。这就是为什么io.emit函数是“未定义的”。
vxf3dgd42#
编辑:(3)相信它就是你要找的...
“服务器.js”
“文件2.js”
“索引文件”
干杯!
zysjyyx43#
当您调用此函数时:
setInterval()
没有为GOR.send_from_another_js()
提供参数,因此io变为undefined。为了解决这个问题,我将在
setInterval()
调用中使用第二个lambda表达式。