gpt4 book ai didi

node.js - 我的命令在 Node js中的每个刷新页面上重复

转载 作者:太空宇宙 更新时间:2023-11-03 23:26:33 25 4
gpt4 key购买 nike

我在我的项目中使用带有express框架和socket.io的node js。

当我在浏览器中加载测试页面(使用此地址: http://localhost:3001/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' });
});

关于node.js - 我的命令在 Node js中的每个刷新页面上重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43538235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com