我的命令在节点js中的每个刷新页面重复
我在我的项目中使用节点js与expression框架和socket.io。
当我在浏览器(这个地址: http:// localhost:3001 /testing )加载testing页时,每一件事情都很好,并在服务器日志中打印“ 用户连接 ”,但当我再次刷新页面打印该消息两次和另一个刷新打印该消息三次,每刷新一次重复该消息。
我的代码有什么问题?
谢谢。
test.js
var express = require('express'); var router = express.Router(); var io = require('../app'); router.get('/', function(req, res, next) { io.on('connection', function(socket){ console.log('a user connected'); }); res.render('test', { title: 'test' }); }); module.exports = router;
app.js
var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var session = require('express-session') var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var app = express(); var server = require('http').Server(app); var io = require('socket.io')(server); server.listen(3001); module.exports = io; var index = require('./routes/index'); var users = require('./routes/users'); var test = require('./routes/test'); // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'hbs'); // 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(express.static(path.join(__dirname, 'public'))); app.use('/', index); app.use('/users', users); app.use('/test', test); // 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;
您正在每个GET /
请求中添加一个附加的事件处理程序。
您只需要在http路由之外添加一次事件处理程序。 把它看作是一条路线的等价物。
var io = require('socket.io')(server); io.on('connection', function(socket){ console.log('a user connected'); });
然后在你的路由器上,处理http请求
router.get('/', function(req, res, next) { res.render('test', { title: 'test' }); });