【问题标题】:How to make express.static middleware ignore get parameter?如何使 express.static 中间件忽略 get 参数?
【发布时间】:2016-02-09 11:11:13
【问题描述】:

我有一个通过 http 加载图像的移动应用程序。我正在使用 GET 参数进行缓存清除。在 QA 和生产中,图像是通过 S3 提供的,这很好用。但在开发中,我直接从我的节点/快递后端使用 express.static() 为它们提供服务。但是这里的get参数使静态找不到文件。有没有办法告诉 express.static 忽略 GET 参数?我挖掘了代码,但可以找到任何明显的东西。想法?

+++更新+++

代码及使用示例:

//serve assets on the dev server only
if ((process.env.NODE_ENV || 'DEVELOPMENT') == 'DEVELOPMENT') {
    app.use(express.static(path.resolve(__dirname,'..','public')));
}

这个有效: localhost:3000/assets/avatars/example.png

这个没有: localhost:3000/assets/avatars/example.png?v=2

+++关闭++++

实际上,如下所述,该错误与静态路由无关。对浪费您的时间表示诚挚的歉意。

【问题讨论】:

  • 你能展示你目前拥有的东西,或者一个例子吗?听上去,我觉得应该没什么问题。
  • 另外 - 你确定你总是想在生产中使你的缓存失效吗?缓存的存在是有充分理由的。
  • 您使用哪个快递版本?一般static中间件是一个小的module,如果不能配置,可以根据需要复制修改,然后用myStatic()代替express.static()
  • 我第二个@Jordonias。 Express.static 将忽略静态文件末尾的任何 GET 参数。您能更具体地了解一下休息时间吗?也许有些文件名示例不起作用?
  • 感谢所有回复和建议。我用代码示例更新了我的问题。 duncahall:这是一个版本标记,而不是随机缓存破坏者 Boris:在最后的手段中,我总是可以只使用发送文件。但我想弄清楚我是否可以使用标准组件。

标签: node.js express


【解决方案1】:

Express 正在一个接一个地运行你定义的所有路线,所以如果你这样做:

app.use('/',express.static('/'))
app.get('/myparamter',function(req,res,next){
    res.send('This Will never be called')

})

但如果你这样做:

app.get('/myparamter',function(req,res,next){
    res.send('This Will be called if you request /myparmeter')
})

// If not another route matches the URL it will server default static file.
app.use('/',express.static('/'))

【讨论】:

  • 感谢您的回复。但是该设置适用于所有文件。除非我使用 get 参数。
猜你喜欢
  • 1970-01-01
  • 2023-03-22
  • 1970-01-01
  • 2019-11-30
  • 2011-05-09
  • 1970-01-01
  • 2018-06-10
  • 2018-01-12
  • 2021-03-02
相关资源
最近更新 更多