Javascript 如何从路由/索引访问io.emit()?4.15特快
bin/www.jsJavascript 如何从路由/索引访问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
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.15var 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我更新了它。请检查你是否从索引路由器功能返回了路由器,我更新了代码