Jac*_*Guy 6 javascript google-chrome node.js express
这是一个非常奇怪的错误,一直困扰着我多年.我有一个使用Express Static中间件的基本网站,以及渲染Jade的单独路由.
这是我的配置
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(stylus.middleware({
src : __dirname + '/public',
dest : __dirname + '/public',
compile : function(str, path)
{
return stylus(str)
.set('filename', path)
.set('compress', true)
.use(nib())
}
}));
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(cookieParser())
app.use(session({ secret: conf.sessionSecret,
store: new RedisStore(),
saveUninitialized: true,
resave: true
}));
app.use(express.static(__dirname + '/public'))
Run Code Online (Sandbox Code Playgroud)
这是我的问题.在Chrome中的单个标签中精确刷新5次后,图片文件就会拒绝加载.所有其他内容都很好,只是图片和Chrome浏览器.为了解决这个问题,您必须打开一个新选项卡.我已经在Firefox中对此进行了测试 - 没有问题.这个错误不仅发生在这个应用程序中 - 它也发生在我的许多其他应用程序中.
由于这个项目目前正在开发中,我宁愿不以在线为例.请放心,这完全可以重现.有任何想法吗?
更新:我更新了Express 4,因为更新可能会解决我的问题.它没.您可以在此处看到我对此问题进行的屏幕演示.
更新:为了测试问题是否与静态服务器有关,我将代码修改为:
app.get('/img/*', function (req,res)
{
console.log(req.url);
console.log(path.extname(req.url));
if (imgExt.indexOf(path.extname(req.url)) != -1)
{
res.sendfile('./public/'+req.url);
}
});
app.use(express.static(__dirname + '/public'))
Run Code Online (Sandbox Code Playgroud)
这没有任何影响,所以我认为这个问题无论是客户端还是Chrome的错误.
经过几个小时的调试,我发现这段遗留代码埋在我的服务器中。
app.get('/favicon.ico', function (req, res)
{
res.writeHead(200, {'Content-Type': 'image/x-icon'} );
});
Run Code Online (Sandbox Code Playgroud)
它的目的是防止旧版本的 Express 对网站图标的双重请求。显然我忘记在最后调用 res.end() 。令我困惑的是,Firefox 和 Internet Explorer 都没有在刷新之间保持这种连接,而 Chrome 却做到了。我很欣赏大家的对话!
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |