用“。”表示app.get静态文件。在文件名中

时间:2018-11-28 08:58:40

标签: javascript node.js express

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:我的坏人!就像别人的评论一样,我发现问题实际上出在服务人员身上。显然是在搞乱缓存。

有人可以解释上面第二段代码中的^.+\.$吗?我会标记那个答案。

2 个答案:

答案 0 :(得分:0)

我认为它是express.js?如果是这样,:parms并不是传递复杂值(例如,简单的alphaliteral,ehm,params等更复杂的值)的最佳选择。您可以尝试将其传递到params的{​​{3}} istead中,并在客户端和unescape服务器端适当地对其进行转义

答案 1 :(得分:-1)

请参阅此文档:

Serving static files in Express