【发布时间】:2015-06-02 19:04:48
【问题描述】:
我正在尝试使用 express.js 4 创建一个非常简单的节点 API,但我需要一些“实时”事件,为此我添加了 socket.io。我对两者都很陌生,所以我可能会遗漏一些基本的东西,但我找不到好的文档/tuts。
在 express 应用程序(使用 express 生成器创建)中,基于我阅读的简单示例和项目文档,我有类似的东西。这工作正常,从客户端应用程序,我可以发送/接收套接字事件:
var express = require('express');
var path = require('path');
var logger = require('morgan');
var api = require('./routes/api');
var app = express();
var io = require('socket.io').listen(app.listen(3000));
app.use(logger('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/api', api);
io.sockets.on('connection', function (socket) {
console.log('client connect');
socket.on('echo', function (data) {
io.sockets.emit('message', data);
});
});
// error handlers omitted
module.exports = app;
但我想使用我的 API 路由中的套接字(在我上面“需要”的 ./routes/api.js 文件中)。例如,有人可能使用 API 来 PUT/POST 资源,我希望该广播到连接的 socket.io 客户端。
我看不到如何使用“io”变量或组织当前在快速路由内的io.sockets.on('connection' ... 函数中的代码。这是./routes/api.js 文件:
var express = require('express');
var router = express.Router();
var io = ???;
router.put('/foo', function(req, res) {
/*
do stuff to update the foo resource
...
*/
// now broadcast the updated foo..
io.sockets.emit('update', foo); // how?
});
module.exports = router;
【问题讨论】: