【问题标题】:Working with express.io in a separate router file在单独的路由器文件中使用 express.io
【发布时间】:2014-07-19 16:41:15
【问题描述】:

我正在尝试同时使用路由器和 socket.io。

我创建了一个单独的路由器文件并尝试将路由和socket.io结合起来

app = require('express.io')();
//var app = express();
//var router = express.Router();
app.http().io();



var mysql = require('mysql');
var connection = mysql.createConnection({
    host    :'aaaa',
    port : 3306,
    user : 'bbbb',
    password : 'cccc',
    database:'dddd'

});

connection.connect(function(err) {
    if (err) {
        console.error('mysql connection error');
        console.error(err);
        throw err;
    }
});



/* GET home page. */
app.get('/', function(req, res) {   
    var query = connection.query('select * from xe_livexe_rss limit 0,1',function(err,rows){
        console.log(rows);
        //res.json(rows);
        res.render('index', { title: 'Express',rss:rows });
        req.io.route('ready');      
    });

});

app.io.route('ready', function(req,res) {

    req.io.emit('talk', {
            message: 'io event from an io route on the server'
    });
}); 

module.exports = app;

但是,当我请求 / 路由器时,它失败并显示以下消息。

TypeError: Object #<Object> has no method 'emit'
    at Object.module.exports [as ready] (/home/ubuntu/nodetest1/routes/index.js:41:12)
    at Manager.io.route (/home/ubuntu/nodetest1/node_modules/express.io/compiled/index.js:85:29)
    at Object.request.io.route (/home/ubuntu/nodetest1/node_modules/express.io/compiled/index.js:197:29)
    at Query._callback (/home/ubuntu/nodetest1/routes/index.js:34:10)
    at Query.Sequence.end (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/sequences/Sequence.js:78:24)
    at Query._handleFinalResultPacket (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/sequences/Query.js:143:8)
    at Query.EofPacket (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/sequences/Query.js:127:8)
    at Protocol._parsePacket (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/Protocol.js:213:24)
    at Parser.write (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/Parser.js:62:12)
    at Protocol.write (/home/ubuntu/nodetest1/node_modules/mysql/lib/protocol/Protocol.js:37:16)

只是想知道我错过了什么......

【问题讨论】:

    标签: javascript node.js express.io


    【解决方案1】:

    根据您的错误消息,我可以说ready 的回调函数没有接收到SocketRequest 对象,它使您可以访问RequestIO 对象,该对象具有您尝试访问emit(event, data) 的事件。

    我猜你的代码有一个错误,如下所示:

    /* GET home page. */
    app.get('/', function(req, res) {   
        var query = connection.query('select * from xe_livexe_rss limit 0,1',function(err,rows){
            console.log(rows);
            //res.json(rows);
            res.render('index', { title: 'Express',rss:rows });
            req.io.route('ready');  // <== 
            //When this event is invoked there will be no req/res object passed to your `ready` event.
            //This has to be invoked by client script. like 
            //Emit ready event. 
             /* `io.emit('ready')`; */ <== clientPage.html
        });    
    });
    

    我有以下代码工作:

    app = require('express.io')();
    app.http().io();
    
    // Setup the ready route, and emit talk event.
    app.io.route('ready', function(req) {
        req.io.emit('talk', {
            message: 'io event from an io route on the server'
        })
    });
    
    // Send the client html.
    app.get('/', function(req, res) {
        res.sendfile(__dirname + '/client.html')
    });
    
    app.listen(7076);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2016-10-27
      • 2015-01-11
      • 1970-01-01
      • 2015-09-20
      相关资源
      最近更新 更多