diff options
-rw-r--r-- | go/README | 25 | ||||
-rw-r--r-- | go/README.markdown | 34 | ||||
-rw-r--r-- | go/index.js | 39 |
3 files changed, 64 insertions, 34 deletions
diff --git a/go/README b/go/README deleted file mode 100644 index 78f6b195..00000000 --- a/go/README +++ /dev/null @@ -1,25 +0,0 @@ -go - minimalistic uri shortener - -# installation - npm install - - optionally - npm install hiredis - -# run service - PORT=1337 node . - -# add uri - curl -F uri=https://mywaytoolonguri http://localhost:1337 - - this will give you a relative shortened uri. - -# resolve uri - - curl -L http://localhost:1337/shortened-relative-uri - -# clear database - - redis-cli keys 'go:*' | xargs redis-cli del - - if you have changed `redisPrefix`, then use that instead of `go:`. diff --git a/go/README.markdown b/go/README.markdown new file mode 100644 index 00000000..11a31975 --- /dev/null +++ b/go/README.markdown @@ -0,0 +1,34 @@ +# go - minimalistic uri shortener + +## install dependencies + + npm install + + apparently you can also + + npm install hiredis + + for more awesome. + +## run service + + HOSTN=go PORT=80 node . + + if you omit `HOSTN`, then relative shortened uris will be generated. + if you omit `PORT`, then it's `1337`. + +## add uri + + curl -F uri=https://mywaytoolonguri http://go + + this will give you a shortened uri. + +## resolve uri + + curl -L http://go/1 + +## clear database + + redis-cli keys 'go:*' | xargs redis-cli del + + if you have changed `redisPrefix`, then use that instead of `go:`. diff --git a/go/index.js b/go/index.js index 470010a9..16b6df98 100644 --- a/go/index.js +++ b/go/index.js @@ -1,13 +1,31 @@ +// configuration (and defaults) +var hostname = process.env.HOSTN; var httpPort = process.env.PORT || 1337; var redisPrefix = 'go:'; - + + +// automatic configuration +var uriPrefix = ''; +if (hostname) { + uriPrefix += 'http://' + hostname; + if (httpPort != 80) { + uriPrefix += ':' + httpPort; + } +} + + +// load libraries var http = require('http'); var formidable = require('formidable'); var redis = require('redis'); - + + +// instantiate components var redisClient = redis.createClient(); var httpServer = http.createServer(listener); - + + +// setup compoments redisClient.on('error', function (err) { console.log('redis made a bubu:', err.message); process.exit(23); @@ -15,7 +33,9 @@ redisClient.on('error', function (err) { httpServer.listen(httpPort, function () { console.log('http server listening on port', httpPort); }); - + + +// http handler function listener (req, res) { if (req.method === 'POST' && req.url === '/') { return create(req, res); @@ -25,7 +45,7 @@ function listener (req, res) { return methodNotAllowed(req, res); } } - + function create (req, res) { redisClient.incr(redisPrefix + 'index', function (err, reply) { if (err) { @@ -41,8 +61,9 @@ function create (req, res) { var uri = fields.uri; // TODO check uri(?) - var shortUri = '/' + reply; - var key = redisPrefix + shortUri; + var shortPath = '/' + reply; + var shortUri = uriPrefix + shortPath; + var key = redisPrefix + shortPath; redisClient.set(key, uri, function (error) { if (error) { @@ -55,7 +76,7 @@ function create (req, res) { }); }); } - + function retrieve (req, res) { var key = redisPrefix + req.url; redisClient.get(key, function (error, reply) { @@ -75,7 +96,7 @@ function retrieve (req, res) { return res.end(); }); } - + function methodNotAllowed (req, res) { res.writeHead(405, { 'content-type': 'text/plain' }); return res.end('method not allowed\r\n'); |