Node.js 重构Express和SocketIO应用程序
我意识到有类似的问题,但我找不到一个对我有帮助的。我有一个ExpressJS4应用程序,我也在使用SocketIO。我的Node.js 重构Express和SocketIO应用程序,node.js,express,socket.io,Node.js,Express,Socket.io,我意识到有类似的问题,但我找不到一个对我有帮助的。我有一个ExpressJS4应用程序,我也在使用SocketIO。我的server.js文件的一个片段如下所示: // server.js ... var app = express(); var server = require('http').createServer(app).listen(process.env.PORT || 8080); var io = require('socket.io')(server); var route
server.js
文件的一个片段如下所示:
// server.js
...
var app = express();
var server = require('http').createServer(app).listen(process.env.PORT || 8080);
var io = require('socket.io')(server);
var routesApi = require('./server/routes/api');
module.exports = app;
var api = function(server){
var ctrlPosts = require('../controllers/posts')(server);
}
var routesApi = require('./server/routes/api')(server);
我有api.js
:
// server/routes/api.js
...
var ctrlPosts = require('../controllers/posts');
router.post('/posts', ctrlPosts.create);
...
以及我的邮务主任:
// controllers/posts
module.exports.create = function(req, res) {
//how can I access io from here?
}
问题
如何从posts控制器访问SocketIO?您可以将posts控制器设计为接受构造函数中的参数
var controller = function(server){
var io = require('socket.io')(server);
var module = {
create : function(req, res) {...}
}
return module;
}
与此类似,您可以将routes api设计为接受服务器参数和call posts控制器,如下所示:
// server.js
...
var app = express();
var server = require('http').createServer(app).listen(process.env.PORT || 8080);
var io = require('socket.io')(server);
var routesApi = require('./server/routes/api');
module.exports = app;
var api = function(server){
var ctrlPosts = require('../controllers/posts')(server);
}
var routesApi = require('./server/routes/api')(server);
并且需要这样的api:
// server.js
...
var app = express();
var server = require('http').createServer(app).listen(process.env.PORT || 8080);
var io = require('socket.io')(server);
var routesApi = require('./server/routes/api');
module.exports = app;
var api = function(server){
var ctrlPosts = require('../controllers/posts')(server);
}
var routesApi = require('./server/routes/api')(server);
您可以将posts控制器设计为接受构造函数中的参数
var controller = function(server){
var io = require('socket.io')(server);
var module = {
create : function(req, res) {...}
}
return module;
}
与此类似,您可以将routes api设计为接受服务器参数和call posts控制器,如下所示:
// server.js
...
var app = express();
var server = require('http').createServer(app).listen(process.env.PORT || 8080);
var io = require('socket.io')(server);
var routesApi = require('./server/routes/api');
module.exports = app;
var api = function(server){
var ctrlPosts = require('../controllers/posts')(server);
}
var routesApi = require('./server/routes/api')(server);
并且需要这样的api:
// server.js
...
var app = express();
var server = require('http').createServer(app).listen(process.env.PORT || 8080);
var io = require('socket.io')(server);
var routesApi = require('./server/routes/api');
module.exports = app;
var api = function(server){
var ctrlPosts = require('../controllers/posts')(server);
}
var routesApi = require('./server/routes/api')(server);
在config目录中创建socket.js并导出io
// socket.js
var socketio = require('socket.io')
module.exports.listen = function(app){
io = socketio.listen(app)
posts = io.of('/posts')
posts.on('connection', function(socket){
socket.on ...
})
return io
}
然后在控制器中调用它
// controller
var io = require('./config/socket').listen(app)
在config目录中创建socket.js并导出io
// socket.js
var socketio = require('socket.io')
module.exports.listen = function(app){
io = socketio.listen(app)
posts = io.of('/posts')
posts.on('connection', function(socket){
socket.on ...
})
return io
}
然后在控制器中调用它
// controller
var io = require('./config/socket').listen(app)
谢谢,这很有用-我将
io
从server.js
传递到api.js
文件,然后传递到posts控制器。谢谢,这很有用-我将io
从server.js
传递到api.js
文件,然后传递到posts控制器。