Socket.io 和 module.exports 没有一起工作。我该如何解决?
Socket.io and module.exports are not working together. How do I fix this?
我在学习Node.js。我刚找到大约 module.exports。在我看来,这是一种通过分离代码来帮助保持代码清洁和可维护的方法。
我尝试了几个例子并且它有效。我通过调用该方法 console.log 做了一些事情,它 运行 另一个文件上的函数。
我也学到了一些socket.io。我也让它工作了。
我想分离代码,所以我将所有 socket.io 连接信息放在一个单独的文件中,并在主服务器文件上调用该方法。
没用。如果所有代码都在同一页上,那么一切正常的唯一方法。
这是我的:
app.js
var app = require('express')();
var ioConnect = require('./ioConnect.js')
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
ioConnect.ioConnection();
ioConnect.js
function addScore() {
var io = require('socket.io');
io.on('connection', function(socket) {
socket.on('score', function(data) {
socket.emit('addScore', 15);
});
});
}
module.exports.ioConnection = addScore;
起初我收到一条错误消息:"io is not defined" 所以我添加了
var io = require('socket.io)(服务器);并没有定义服务器所以我试过了
var io = require('socket.io');并收到此错误:
/root/game/ioConnect2.js:5
io.on('connection', function(socket) {
^
TypeError: Object function Server(srv, opts){
if (!(this instanceof Server)) return new Server(srv, opts);
if ('object' == typeof srv && !srv.listen) {
opts = srv;
srv = null;
}
opts = opts || {};
this.nsps = {};
this.path(opts.path || '/socket.io');
this.serveClient(false !== opts.serveClient);
this.adapter(opts.adapter || Adapter);
this.origins(opts.origins || '*:*');
this.sockets = this.of('/');
if (srv) this.attach(srv, opts);
} has no method 'on'
at Object.addScore [as ioConnection] (/root/game/ioConnect2.js:5:16)
at Object.<anonymous> (/root/game/app:8:19)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
如果我将代码放在一个文件中,一切正常。有人可以向我解释一下这里到底发生了什么以及我需要做什么吗?
当您需要 socket.io 时,它 return 是一个函数。在 app.js 中,您使用参数调用了 require/function,并将 return 值存储在 'io' 中。目前很好。在 ioConnect.js 中,您将函数本身存储在 io.而不是那样做,你应该将你在 app.js 中设置的 io 传递给你的 ioConnect.js 要求的函数 returned。
app.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var ioConnect = require('./ioConnect.js')(io);
server.listen(80);
ioConnect.addScore();
ioConnect.js
function ioConnection(io) {
if (!(this instanceof ioConnection)) {
return new ioConnection(io);
}
this.io = io;
}
ioConnection.prototype.addScore = function() {
this.io.on('connection', function (socket) {
socket.on('score', function (data) {
socket.emit('addScore', 15);
});
});
}
module.exports = ioConnection;
我在学习Node.js。我刚找到大约 module.exports。在我看来,这是一种通过分离代码来帮助保持代码清洁和可维护的方法。 我尝试了几个例子并且它有效。我通过调用该方法 console.log 做了一些事情,它 运行 另一个文件上的函数。
我也学到了一些socket.io。我也让它工作了。
我想分离代码,所以我将所有 socket.io 连接信息放在一个单独的文件中,并在主服务器文件上调用该方法。
没用。如果所有代码都在同一页上,那么一切正常的唯一方法。
这是我的:
app.js
var app = require('express')();
var ioConnect = require('./ioConnect.js')
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
ioConnect.ioConnection();
ioConnect.js
function addScore() {
var io = require('socket.io');
io.on('connection', function(socket) {
socket.on('score', function(data) {
socket.emit('addScore', 15);
});
});
}
module.exports.ioConnection = addScore;
起初我收到一条错误消息:"io is not defined" 所以我添加了 var io = require('socket.io)(服务器);并没有定义服务器所以我试过了 var io = require('socket.io');并收到此错误:
/root/game/ioConnect2.js:5
io.on('connection', function(socket) {
^
TypeError: Object function Server(srv, opts){
if (!(this instanceof Server)) return new Server(srv, opts);
if ('object' == typeof srv && !srv.listen) {
opts = srv;
srv = null;
}
opts = opts || {};
this.nsps = {};
this.path(opts.path || '/socket.io');
this.serveClient(false !== opts.serveClient);
this.adapter(opts.adapter || Adapter);
this.origins(opts.origins || '*:*');
this.sockets = this.of('/');
if (srv) this.attach(srv, opts);
} has no method 'on'
at Object.addScore [as ioConnection] (/root/game/ioConnect2.js:5:16)
at Object.<anonymous> (/root/game/app:8:19)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
如果我将代码放在一个文件中,一切正常。有人可以向我解释一下这里到底发生了什么以及我需要做什么吗?
当您需要 socket.io 时,它 return 是一个函数。在 app.js 中,您使用参数调用了 require/function,并将 return 值存储在 'io' 中。目前很好。在 ioConnect.js 中,您将函数本身存储在 io.而不是那样做,你应该将你在 app.js 中设置的 io 传递给你的 ioConnect.js 要求的函数 returned。
app.js
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var ioConnect = require('./ioConnect.js')(io);
server.listen(80);
ioConnect.addScore();
ioConnect.js
function ioConnection(io) {
if (!(this instanceof ioConnection)) {
return new ioConnection(io);
}
this.io = io;
}
ioConnection.prototype.addScore = function() {
this.io.on('connection', function (socket) {
socket.on('score', function (data) {
socket.emit('addScore', 15);
});
});
}
module.exports = ioConnection;