这是一个非常奇怪的错误,一直困扰着我多年.我有一个使用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'))
这是我的问题.在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'))
这没有任何影响,所以我认为这个问题无论是客户端还是Chrome的错误.