iproxy v0.0.4
iproxy
This is an image proxy for node.js/browser. It is meant to be used as a connect/express middleware, but it can be used by itself.
Use Case
User images won't always show up on your site:
- Many image hosts, such as imgur, do not support HTTPS. If your site only uses HTTPS, you're going to get mixed message warnings.
- Some image hosts block hotlinking. That's fine - we'll proxy the images to our servers and serve it ourselves.
Generally speaking, you should put this proxy instance behind a cache as this module does not cache any images. If you use CloudFlare as a CDN, you can even prevent hotlinking.
Inspiration: camo.
Installation
In node.js:
npm install iproxy
For the browser, we use component:
component install discore/iproxy
API
Node.js
You should mount the middleware to some prefix. For example, we'll use the prefix /proxy
:
app.use('/proxy', require('iproxy'))
URLs
Assume we use the prefix /proxy
. Images are now proxied at the address '/proxy' + url
where url
is the URL of the image without the protocol. ex., /proxy/i.imgur.com/mFtyLGJ.gif
would proxy the image http://i.imgur.com/mFtyLGJ.gif
through your server.
Browser
We want to create an iproxy
instance with the prefix /proxy
:
var iproxy = require('iproxy')('/proxy')
- `iproxy(url, callback)
.
url
- the image URL you want to proxy.callback(err, url)
err
- non-null
, the image failed to load and proxy.url
- the image URL that worked - either the original URL or the proxied URL.
iproxy('http://i.imgur.com/mFtyLGJ.gif', function (err, url) {
// Input URL will match the output URL
// because the image works
url === http://i.imgur.com/mFtyLGJ.gif
})
iproxy('https://i.imgur.com/mFtyLGJ.gif', function (err, url) {
// The output URL will be a proxied URL
// since imgur doesn't support HTTPS
url === /proxy/i.imgur.com/mFtyLGJ.gif
})
Note: it's up to you what protocol you'd like to test. You may want to use //i.imgur.com/mFtyLGJ.gif
protocol-less URLs.
License
WTFPL