Javascript 如何从路由/索引访问io.emit()?4.15特快

Javascript 如何从路由/索引访问io.emit()?4.15特快,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,bin/www.js var server = http.createServer(app); io = require('socket.io')(server); io.on('connection', function(client) { console.log('Client connected...'); client.on('join', function(data) { console.log(data); }); }); server.listen(port); var

bin/www.js

var server = http.createServer(app);
io = require('socket.io')(server);
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
    console.log(data);
});
});

server.listen(port);
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

    // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

/*app.use(function(req, res, next) {
req.headers['if-none-match'] = 'no-match-for-this';
next();
});*/



//app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public'), {
maxAge: '30d',
setHeaders: function (res, path) {
        res.setHeader('Cache-Control', 'public, max-age=14770')
}
}));

console.log("PATH"+path.join(__dirname, 'public'));

app.io = require('socket.io')();
app.io.on('connection', function(socket){
// do whatever you want
});

const userRoute = require('./routes/index')(app.io);
app.use('/', userRoute);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
    });

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


module.exports = app;
在这里,我需要通过socket.io访问或发送消息或mongoose结果(我不知道这是否可能?)

我需要从
routes/index.js
页面向客户端发送消息。 我试过的是

module.exports.io = io; //(in `bin/www`)
然后像这样访问index.js中的泰文io var io=require('../bin/www')

但它认为有些错误

io.on('connection', function(client) {
^
TypeError: io.on is not a function....
我的需要是, 我想在调用路由时将动态结果发送给客户端,或者使用
socket.io将一些
mongoose
查询结果发送给客户端是否可能

express4.15
var server=http.createServer(app)上的位于bin/www.js

var server = http.createServer(app);
io = require('socket.io')(server);
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
    console.log(data);
});
});

server.listen(port);
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

    // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

/*app.use(function(req, res, next) {
req.headers['if-none-match'] = 'no-match-for-this';
next();
});*/



//app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public'), {
maxAge: '30d',
setHeaders: function (res, path) {
        res.setHeader('Cache-Control', 'public, max-age=14770')
}
}));

console.log("PATH"+path.join(__dirname, 'public'));

app.io = require('socket.io')();
app.io.on('connection', function(socket){
// do whatever you want
});

const userRoute = require('./routes/index')(app.io);
app.use('/', userRoute);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
    });

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


module.exports = app;
app.js

var server = http.createServer(app);
io = require('socket.io')(server);
io.on('connection', function(client) {
console.log('Client connected...');
client.on('join', function(data) {
    console.log(data);
});
});

server.listen(port);
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');

var index = require('./routes/index');
var users = require('./routes/users');

var app = express();

    // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

/*app.use(function(req, res, next) {
req.headers['if-none-match'] = 'no-match-for-this';
next();
});*/



//app.use(express.static(path.join(__dirname, 'public')));
app.use(express.static(path.join(__dirname, 'public'), {
maxAge: '30d',
setHeaders: function (res, path) {
        res.setHeader('Cache-Control', 'public, max-age=14770')
}
}));

console.log("PATH"+path.join(__dirname, 'public'));

app.io = require('socket.io')();
app.io.on('connection', function(socket){
// do whatever you want
});

const userRoute = require('./routes/index')(app.io);
app.use('/', userRoute);
app.use('/users', users);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
    });

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


module.exports = app;
更新Ashish提供的代码后出错

PATHC:\Users\ADSS\Desktop\PrintAdmin\public
C:\Users\ADSS\Desktop\PrintAdmin\node\u modules\express\lib\router\index.js:635 返回fn.apply(这是参数); ^

TypeError: Cannot read property 'apply' of undefined
at
C:\Users\ADSS\Desktop\PrintAdmin\node\u modules\express\lib\router\index.js:635:14 下一步(C:\Users\ADSS\Desktop\PrintAdmin\node\u modules\express\lib\router\index.js:210:14) 位于Function.handle(C:\Users\ADSS\Desktop\PrintAdmin\node\u modules\express\lib\router\index.js:174:3) 在路由器上(C:\Users\ADSS\Desktop\PrintAdmin\node\u modules\express\lib\router\index.js:47:12) 反对。(C:\Users\ADSS\Desktop\PrintAdmin\app.js:46:44) 在模块处编译(Module.js:570:32) 在Object.Module.\u extensions..js(Module.js:579:10) 在Module.load(Module.js:487:32) 在tryModuleLoad时(module.js:446:12) 在Function.Module.\u加载(Module.js:438:3) at Module.require(Module.js:497:17) 根据需要(内部/module.js:20:19) 反对。(C:\Users\ADSS\Desktop\PrintAdmin\bin\www:7:11) 在模块处编译(Module.js:570:32) 在Object.Module.\u extensions..js(Module.js:579:10)
在Module.load(Module.js:487:32)

注意:我实际上还没有试过

但是你能试试这个模式吗

在www.js

 module.exports = function(io) {

  io.on('connection', function(client) {
    console.log('Client connected...');
    client.on('join', function(data) {
        console.log(data);
    });
  });
}
在index.js中

var server = http.createServer(app);
io = require('socket.io')(server);

require('./wwww.js)(io);

注意:我实际上还没有试过

但是你能试试这个模式吗

在www.js

 module.exports = function(io) {

  io.on('connection', function(client) {
    console.log('Client connected...');
    client.on('join', function(data) {
        console.log(data);
    });
  });
}
在index.js中

var server = http.createServer(app);
io = require('socket.io')(server);

require('./wwww.js)(io);

我猜您已经使用创建app.js和bin/www文件的express generator生成了应用程序,在路由中使用io对象存在循环依赖性问题。这是你能做的

内部app.js

app.io = require('socket.io')(); // initialize io, attach server in www
// use socket events here
app.io.on('connection', function(socket){
   // do whatever you want
})

// you can pass app.io inside the router and emit messages inside route.
const userRoute = require('./routes/user')(app.io);
app.use('/users', userRoute);
内箱/www

var io = app.io;  
var server = http.createServer(app);  
io.attach(server);  
下面是路由器的外观,user.js

module.exports = function(io){
    router.get('/', function(req, res, next){
        io.emit("message", "your message");
        res.send();
    })
    // edited
    return router;
}

我猜您已经使用创建app.js和bin/www文件的express generator生成了应用程序,在路由中使用io对象存在循环依赖性问题。这是你能做的

内部app.js

app.io = require('socket.io')(); // initialize io, attach server in www
// use socket events here
app.io.on('connection', function(socket){
   // do whatever you want
})

// you can pass app.io inside the router and emit messages inside route.
const userRoute = require('./routes/user')(app.io);
app.use('/users', userRoute);
内箱/www

var io = app.io;  
var server = http.createServer(app);  
io.attach(server);  
下面是路由器的外观,user.js

module.exports = function(io){
    router.get('/', function(req, res, next){
        io.emit("message", "your message");
        res.send();
    })
    // edited
    return router;
}

bro var server=http.createServer(app);io=require('socket.io')(服务器);是在www.js中定义的,那么我如何在index.js中重新定义它呢;把require看作是复制粘贴的一种形式;在这种情况下;www.js的module.exports中的内容现在粘贴在index.jsbro var server=http.createServer(app)中;io=require('socket.io')(服务器);是在www.js中定义的,那么我如何在index.js中重新定义它呢;把require看作是复制粘贴的一种形式;在这种情况下;www.js的module.exports中的内容现在粘贴在index.jsheii no bro中。。我不是在app.js上创建服务器,而是在www.jsheii no bro上。。我不是在app.js上创建服务器,而是在www.js上。这是最好的方法。:)返回fn.apply(这个,参数);^TypeError:无法读取在…处未定义的属性“apply”。。。。反对。(C:\Users\ADSS\Desktop\PrintAdmin\app.js:45:44)错误!!!你能分享你的app.js文件吗,这样我就可以运行它并查看。bro我更新了它。请检查你是否从索引路由器功能返回了路由器,我更新了代码这是最好的方法。:)返回fn.apply(这个,参数);^TypeError:无法读取在…处未定义的属性“apply”。。。。反对。(C:\Users\ADSS\Desktop\PrintAdmin\app.js:45:44)错误!!!你能分享你的app.js文件吗?这样我就可以运行它并查看。bro我更新了它。请检查你是否从索引路由器功能返回了路由器,我更新了代码