Expressjs 4路由分离
Expressjs 4 route separation
我正在搞乱socketIO,目前我有一个单独的路由文件:
//api.js
var express = require('express');
var router = express.Router();
router.get('/test', function (req, res) {
io.sockets.emit("change", {message: "this is a test"}); //io is NOT referenced!!!
response.send(200);
});
module.exports = router;
其中io
在我的server.js
中被引用,如下
var express = require('express');
var io = require('socket.io');
var app = express(),
server = require('http').createServer(app).listen(8080),
io = io.listen(server);
在使用socketIO之前,我包含了api路由文件,并以/api
为所有路由前缀,像这样:
var api = require('./server/routes/api');
app.use('/api', api);
问题:如何将socketIO io
的引用传递给路由文件?
有很多方法可以做到这一点。你可以像这样直接将实例传递给路由:
// api.js
var express = require('express');
var router = express.Router();
var io;
router.get('/test', function (req, res) {
io.sockets.emit("change", {message: "this is a test"});
response.send(200);
});
module.exports = function(sio) {
io = sio;
return router;
};
// server.js
var api = require('./server/routes/api');
app.use('/api', api(io));
或者你可以把你的插座。在任何需要套接字的文件中设置require()
。io实例。
api
前缀不相关
(Very)大致是这样的:
api.js
var router = require('express').Router();
module.exports = function(io) {
router.get('/test', function (req, res) {
io.sockets.emit("change", {message: "this is a test"});
response.send(200);
});
return router;
};
<<p> server.js片段/strong> var api = require('./server/routes/api')(io);
app.use('/api', api);
您不需要只在模块级别公开该函数,例如,您可以公开init
函数,就像普通模块公开函数一样:
api.js
exports.init = function (io) {
router.get('/test', function (req, res) {
io.sockets.emit("change", {message: "this is a test"});
response.send(200);
});
return router;
};
<<p> server.js片段/strong> var api = require('./server/routes/api');
app.use('/api', api.init(io));
我远离任何我可以测试的东西,但简单的解释是,您想公开一个接受io
变量的函数。在该函数中,io
是您传入的内容
相关文章:
- Emberjs应用程序加载在除Index之外的所有路由上
- 正在使用$location.path(.)路由ng视图
- 在AngularJS应用程序中使用封装指令和路由的推荐方式是什么
- 如何附着分离的对象
- 如何使用jQuery each分离字符串中的元素
- 将JavaScript函数与HTML分离
- 未激发路由的控制器属性上的观察者
- 将Javascript与HTML分离
- AngularJS ui路由器html5模式中断路由
- 发送json对象或使用express路由呈现视图
- 使用主干网和rails的静态页面路由
- 如何使用Passport保护路由终结点
- 有没有办法用routerLink/router.navigation附加查询/路由参数
- 如何定义一个模块并使用它来分离js文件
- Nodejs和express路由,如何处理客户端的承诺
- 分离角度路由、控制器和服务
- Expressjs 4路由分离
- 如何将代码从一个路由文件分离到多个,以及如何从这些分离的文件中调用函数
- expressJS:分离路由,模型,使导出的属性从模型到路由到工作异步
- 我如何分离插座.IO路由代码到不同的文件