(不熟悉节点。)
我使用生成了我的express
js应用express-generator
所以文件结构看起来像这样
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
我想实现套接字io。等等bin/www
我在下面添加了此代码 server.listen(port);
server.listen(port);
/**
* Socket IO
*/
var io = require('socket.io')(server);
io.on('connection', function(socket){
console.log('a user connected');
console.log(socket.id);
socket.on('disconnect', function(){
console.log('user disconnected');
console.log(socket.id);
});
});
客户端每次连接时,都会记录
用户已连接
现在我想使用他们的socket.id向特定用户发布更新
在routes / index.js上
var express = require('express');
var router = express.Router();
var io = require('socket.io');
/* GET home page. */
router.route('/')
.get(function(req, res, next)
{
res.send('Nothing to do here');
})
.post(function(req, res, next)
{
var socketid = req.param('socketid');
io.broadcast.to(id).emit('message', "Hello World");
}
);
module.exports = router;
现在,每次我发布。我得到一个错误
Cannot read property 'to' of undefined
看来我错了io。
我是否还需要index.js内的服务器?
或如何使用www中声明的一个io var?这可能吗?只使用现有的对象
您正在得到Cannot read property 'to' of undefined
,因为您尚未io
在routes\index.js
file中定义并且您没有对io
in进行引用bin/www
。
您可以通过将新io
对象传递到路由文件来解决此问题。例如
斌/ www
server.listen(port);
/**
* Socket IO
*/
var io = require('socket.io')(server);
//remove same lines from app.js
var routes = require('./router/index.js')(io);
app.use('/', routes)
io.on('connection', function(socket){
console.log('a user connected');
console.log(socket.id);
socket.on('disconnect', function(){
console.log('user disconnected');
console.log(socket.id);
});
});
路由器/ index.js
module.exports = function(io) {
var express = require('express');
var router = express.Router();
/* GET home page. */
router.route('/').get(function(req, res, next){
res.send('Nothing to do here');
}).post(function(req, res, next){
var socketid = req.param('socketid');
io.broadcast.to(id).emit('message', "Hello World");
});
return router;
}
让我知道,如果它不起作用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句