我在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
,并显示图片。