monguurl
v0.1.0
Published
Automatically generate a unique and url-friendly alias/slug and store it in Mongoose
Downloads
51
Readme
Monguurl
Automatically generate a unique and url-friendly alias/slug and store it in Mongoose. Assumes you have a field on which the alias is based on. For posts it's common to generate an alias from the title.
Example
Define your model like this:
var mongoose = require('mongoose'),
monguurl = require('monguurl');
Post = new mongoose.schema({
title: { type: String },
slug: { type: string, index: { unique: true } }
});
Post.plugin(monguurl({
source: 'title',
target: 'slug'
}));
mongoose.model('Post', Post);
And then if you for example create a new document like this:
mongoose.model('Post').create({
title: 'This is so Äwesome!'
});
The slug will be automatically generated and stored in the database:
{
"_id": "09876543...",
"title": "This is so Äwesome!",
"slug": "this-is-so-awesome"
}
Create another identical document and it will be stored like this:
{
"_id": "09876543...",
"title": "This is so Äwesome!",
"slug": "this-is-so-awesome-2"
}
The ending number will increase to "-100", then it will be "-100-2". This is to avoid ruining intentional numbers such as "It's over 9000" or "A day in 2013". It's unlikely enough that either such a title is repeated or that the same title is used more than a hundred times anyway.
Also note that theoretically this plugin can be used without a source/title, if such behavior is desired. Just set the target field when creating the document and any source will be ignored.
Installation
npm install monguurl --save
Documentation
- monguurl(options)
Creates the mongoose plugin.- options.source (string) Path to the field which to generate the alias from.
Default: 'title' - options.target (string) path to the field where the alias should be stored.
Default: 'alias'
- options.source (string) Path to the field which to generate the alias from.
- urlProof(alias)
Method used to make a string url-friendly. If you want a different method, just replace it.