gpt4 book ai didi

ios - 将 Socket IO 与 Express JS 结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 02:13:11 25 4
gpt4 key购买 nike

(不熟悉 Node 。)

我使用 express-generator 生成了我的 express js 应用程序

所以文件结构如下所示

├── 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);
});

});

每次客户端连接时,都会记录

a user connected

现在我想使用特定用户的 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,因为您尚未在routes\index.js 文件中定义io,并且在bin/www 中没有对io 的引用。

您可以通过将新的 io 对象传递到路由文件来解决该问题。例如

bin/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;
}

如果不起作用,请告诉我。

关于ios - 将 Socket IO 与 Express JS 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36999805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com