Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 不同文件中的Socket.io_Javascript_Node.js_Express_Socket.io - Fatal编程技术网

Javascript 不同文件中的Socket.io

Javascript 不同文件中的Socket.io,javascript,node.js,express,socket.io,Javascript,Node.js,Express,Socket.io,要在不同的文件中使用io对象,我使用下面的方法。。我似乎没有收到编译错误。因此io在users.js文件中被“定义”。。但我似乎并没有提名任何活动。有人看到问题了吗 app.js var app = require('express')() , server = require('http').createServer(app) global = require('./global.js'); global.io = require('socket.io').listen(server);

要在不同的文件中使用io对象,我使用下面的方法。。我似乎没有收到编译错误。因此io在users.js文件中被“定义”。。但我似乎并没有提名任何活动。有人看到问题了吗

app.js

var app = require('express')()
  , server = require('http').createServer(app)

global = require('./global.js');
global.io = require('socket.io').listen(server);
global.io.configure(function () { 
  global.io.set("transports", ["xhr-polling"]); 
  global.io.set("polling duration", 10); 
});
// express settings
require('./config/express')(app, config, passport)

require('./config/passport')(passport, config, env)

// Bootstrap routes
require('./config/routes')(app,passport)

var port = process.env.PORT || 3000
server.listen(port)
global.js

var Global = {
    io : { }
};    
module.exports = Global;
routes.js

var users = require('../app/controllers/users')

module.exports = function (app, passport) {
    app.post('/incomingFake', users.getFake);
}
users.js

var global = require('../../global.js')

exports.getFake = function(req, res){
    global.io.sockets.on('connection', function(socket) {
        socket.broadcast.emit('email', req.body);
    });

    User.findAndStoreEmail(senderEmail, email ,function(){
        res.writeHead(200, {'content-type': 'text/plain'})
        res.end('Message Received. Thanks!\r\n')
    })


}
我尝试在前端的主干收集中接收这些信息

define([
    'jquery',
    'underscore',
    'backbone',
    'Email',
    'marionette',
    'socketio'
], function ($, _, Backbone, emailModel, Marionette, io) {
    'use strict';

    var Emails = Backbone.Collection.extend({

        url : '/emails',
        model : emailModel,

        initialize : function() {
            var socket = io.connect('http://localhost:3000');
             socket.on('email', function (data) {
                console.log("i got the socket connection");
                console.log(data);
            });
        }

    });

    return Emails;
});
编辑:


我意识到了一些事情!我认为这可能对解决问题有很大帮助,我实际上收到了连接事件,套接字发出了一些东西,但这一切都是在页面加载时发生的。。我希望仅发出此事件调用“getFake”函数,因为您正试图基于客户端所在的路由管理连接

你可以试试

表示在由路径名(例如:/chat)标识的给定作用域下连接的套接字池

默认情况下,客户端始终连接到/

因此,在服务器端代码方面,一个简短的示例是

io.of("/users").on("connection",function(socket){
 /*
  when connecting from /users, the socket object will be available here
 */
});

// all clients of pathname /users will get this message
io.of("/users").emit("greeding","Hello fellow users");

您是否在“连接”活动中收到任何信息?你在这里发出“email”,但我没有看到接受“email”事件的代码。只是编辑了我的问题,谢谢我甚至没有从我的连接事件中收到任何东西。这是一种肮脏的伎俩,它会导致你在“what's not work”问题上损失数小时,与其这样做,不如尝试使用名称空间,如果这是你想要的,例如(“/users”)的
io...
,以及(“/store”)的
io...
您的控制台中有任何错误吗?非常感谢,这很有帮助