使用app.param()将字符串与扩展名匹配

时间:2014-06-02 06:10:42

标签: javascript regex node.js express

我在Node.js中构建了一个简单的网站,作为Imgur图像和相册的代理,用于阻止它的国家/地区。 Imgur URL有几种类型:

http://i.imgur.com/fiQ3A2t.jpg => Shows direct image
http://i.imgur.com/fiQ3A2t => Redirects to http://i.imgur.com/fiQ3A2t.jpg
http://imgur.com/fiQ3A2t => Loads gallery page

我正在使用Express.js,而我尝试做的就是说明了URL之间的区别。第一个URL不需要API调用,但是另外两个URL需要获取直接图像链接。到目前为止,这就是我正在使用的:

app.get('/:image', function(req, res){
  res.send('Requested image ' + req.params.image);
});

然而,这匹配所有内容(我只需要.com/之后的所有内容。这意味着如果我输入类似mysite.com/fiQ3A2t.jpg的网址,我无法区分直接链接和需要Imgur的链接API调用。

要解决此问题,我尝试使用RegEx来匹配带有扩展名的网址和不带扩展名的网址:

// Check for file extension
app.param('image', /\.(jpe?g|png|gif)$/gi);

app.get('/:image', function(req, res){
  res.send('Requested image ' + req.params.image);
});

但是,这会在尝试运行时抛出以下错误:

Error: invalid param() call for image, got /\.(jpe?g|png|gif)$/gi

如何处理与fiQ3A2t.jpg不同的fiQ3A2t?理想情况下使用Express内置的.param方法,但我对所有内容都开放。只是为了上下文,我们会制作最终网站,以便您可以在imgur的任何图片链接中替换mydomain,并显示图片。

0 个答案:

没有答案