gpt4 book ai didi

javascript - 防止 favicon.ico 发出第二个请求 - Node.js

转载 作者:搜寻专家 更新时间:2023-10-31 23:33:19 25 4
gpt4 key购买 nike

我试图阻止 favicon.ico 在套接字连接时发出第二个请求。

这是我的服务器:

var io = require('socket.io'),
connect = require('connect');

var app = connect()
.use(connect.static('public'))
.use(function(req, res, next){
if (req.url === '/favicon.ico') {
res.writeHead(200, {'Content-Type': 'image/x-icon'} );
next();
}
})
.use(function(req, res){
res.end('stupid favicon...');
}).listen(3000);

var game = io.listen(app);

game.sockets.on('connection', function(socket){
socket.emit('entrance', {message: 'Welcome to the game!'});

socket.on('disconnect', function(){
game.sockets.emit('exit', {message: 'A player left the game...!'});
});
game.sockets.emit('entrance', {message: 'Another gamer is online!'});
});

这似乎行不通。我没有收到任何错误,但是当一个套接字连接时,从客户端加载了两个图像,这使得看起来仍然有两个请求在发生。

那么我的代码是完全错误的,还是我在正确的轨道上?因为无论我在服务器代码中使用什么 console.log(),控制台都不会打印任何内容。

编辑:客户端

var socket = io.connect('http://localhost:3000');

socket.on('entrance', function(data){
console.log(data.message);

var num = (count > 0) ? count : '';
console.log("hero" + num);

var hero = new Car("hero" + num);
hero.init();

count++;
});

count 是全局的。我有(现在有两张图片),一张 #hero#hero1。当一个玩家连接时,两个图像都会被加载。

最佳答案

当您想要响应请求时,您不应该调用 next。通常,writeHead() 然后调用next 是无效的。大多数中间件都希望处理尚未写入网络的响应。

您的“愚蠢的 favicon”中间件运行的原因是您通过在第一个中调用 next 来调用它。您需要 res.writeHead()res.end() OR 只需调用 next

function(req, res, next){
if (req.url === '/favicon.ico') {
res.writeHead(200, {'Content-Type': 'image/x-icon'} );
res.end(/* icon content here */);
} else {
next();
}
}

或者,只需使用 the builtin favicon middleware ,它会做一些重要的事情,比如设置正确的 Cache-Control header 。

关于javascript - 防止 favicon.ico 发出第二个请求 - Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19225299/

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