【问题标题】:Express app.get static file with "." in filename用“.”表示 app.get 静态文件在文件名中
【发布时间】:2018-11-28 08:58:40
【问题描述】:
app.get('/images/:filename', (req, res, next) => {
  console.log(req.params.filename);
  const newUrl = `/static/images/${req.params.filename}`;
  req.url = newUrl;
  next();
});

如果filename 不包含特殊字符.,上述代码可以正常工作

例如localhost/images/myImage.jpg 将打印出myImage.jpg

如果filename 包含.,例如localhost/images/my.Image.jpg,控制台将不会打印任何内容。有没有办法解决这个问题?

编辑:在下面添加代码。我不确定它的作用。

app.get(
    /^.+\.(jpg|jpeg|gif|png|bmp|ico)$/,
    (req, res) => {
        res.status(404).end();
    }
);

编辑 2:我的错!就像某人的评论一样,我发现问题实际上来自 Service Worker。这显然是在搞乱缓存。

有人能解释一下^.+\.$ 在上面第二段代码中的作用吗?我会为那个人标记答案。

【问题讨论】:

  • 这不是真的。 :filename 参数应该与 myImage.jpgmy.Image.jpg 一起使用。参数中的额外点不会影响它的工作方式。问题不在发布的代码中,也不应该影响console.log 调用。请提供stackoverflow.com/help/mcve 以复制问题。

标签: javascript node.js express


【解决方案1】:

我假设它是 express.js?如果是这样,:parms 不是传递复杂值的最佳候选者(例如,比简单的 alphaliteral、ehm、params 更复杂的东西)。您可以尝试将其传递给 req.query 而不是 params 并在客户端正确转义它并在服务器端转义

【讨论】:

    【解决方案2】:

    请参阅此文档:

    Serving static files in Express

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 2016-06-04
      • 2016-01-08
      • 2021-11-03
      • 2014-08-19
      • 2021-11-13
      相关资源
      最近更新 更多