short
Node.js URL Shortener backed by Mongoose.js
No Callbacks, just Promises!
Installation
$ npm install short
Basic API Usage
Generates a Shortened URL Doc, then retrieves it for demo:
var shortURLPromise
, short = require('../lib/short');
// connect to mongodb
short.connect('mongodb://localhost/short');
short.connection.on('error', function(error) {
throw new Error(error);
});
// promise to generate a shortened URL.
var shortURLPromise = short.generate({
URL : 'http://nodejs.org/'
});
// gets back the short url document, and then retrieves it
shortURLPromise.then(function(mongodbDoc) {
console.log('>> created short URL:');
console.log(mongodbDoc);
console.log('>> retrieving short URL: %s', mongodbDoc.hash);
short.retrieve(mongodbDoc.hash).then(function(result) {
console.log('>> retrieve result:');
console.log(result);
process.exit(0);
}, function(error) {
if (error) {
throw new Error(error);
}
});
}, function(error) {
if (error) {
throw new Error(error);
}
});
Listing all Shortened URLs in DB:
var listURLsPromise
, short = require('../lib/short');
// connect to mongodb
short.connect('mongodb://localhost/short');
short.connection.on('error', function(error) {
throw new Error(error);
});
// promise to retrieve all shortened URLs
listURLsPromise = short.list();
// output all resulting shortened url db docs
listURLsPromise.then(function(URLsDocument) {
console.log('>> listing (%d) Shortened URLS:', URLsDocument.length);
console.log(URLsDocument);
process.exit(0);
}, function(error) {
if (error) {
throw new Error(error);
}
});
Updating the URL or the data fields of an existing Short URL hash
// Basically, update works like this
var updatePromise = short.update(hash, updateData);
// hash => Short url hashcode generated using short.generate()
// updateData => An object consisting of the new URL and/or the new data object.
// If a key already exists in the current data object, it's value is updated,
// otherwise, it is added and saved to the data object
//This function returns a promise which on resolution returns the new updated object as an argument.
Here's some working code. hash
is assumed to be given
// The basic Initialisation, Connection, Short URL generation and
// retrieval remains the same as depicted in previous examples
// the variable hash contains the short url hash code generated using short.generate()
var updatePromise = short.update(hash,{
URL : 'http://www.youtube.com/watch?v=qvsgGtivCgs',
data: {
'type' : 'movie-trailer',
'movie': 'Back To The Future'
}
});
updatePromise.then(function(ShortURLObject) {
console.log('New URL:', ShortURLObject.URL, '\nNew data:', ShortURLObject.data);
}, function(error) {
console.log('Error', error);
});
Contribute
- Fork
- Clone forked repository
- Add some sweet code
- Tests still passing? Run tests with
npm test
- Add a test if adding a feature
- Pull Request
- Instant Karma!
License (MIT)
Copyright (c) 2011-2013, Edward Hotchkiss.