dragonroll/backend/node_modules/mongoose-slug-generator/README.md

180 lines
5.1 KiB
Markdown

# mongoose-slug-generator
Mongoose plugin for creating slugs based on mongoose schema fields. For example you can create a slug based on a document's title and author's name: _my-post-title-kevin-roosevelt_, or unique slugs based on just the title: _my-post-title-Nyiy4wW9l_.
## Installation
The best way to install it is using **npm**
```sh
npm install mongoose-slug-generator --save
```
## Loading
```js
var slug = require('mongoose-slug-generator');
```
## Initialization
```js
var mongoose = require('mongoose');
mongoose.plugin(slug);
```
## Usage
This plugin is based on the idea of using the **mongoose schema** as the way to check the use of slug fields.
The plugin checks and updates automatically the *slug field* with the correct slug.
### Basic Usage
If you only want to create the slug based on a simple field.
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
mongoose.plugin(slug),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
slug: { type: String, slug: "title" }
});
```
### Multiple slug fields
You can add as many slug fields as you wish
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
mongoose.plugin(slug),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
subtitle: String,
slug: { type: String, slug: "title" },
slug2: { type: String, slug: "title" },
slug3: { type: String, slug: "subtitle" }
});
```
### Multiple fields to create the slug
If you want, you can use more than one field in order to create a new slug field.
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
mongoose.plugin(slug),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
subtitle: String,
slug: { type: String, slug: ["title", "subtitle"] }
});
```
### Unique slug field
To create a unique slug field, you must only add add the *unique: true* parameter in the path (also, this way the default mongo unique index gets created)
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
mongoose.plugin(slug),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
subtitle: String,
slug: { type: String, slug: ["title", "subtitle"], unique: true }
});
```
If _unique_ is set, the plugin searches in the mongo database, and if the slug already exists in the collection, it appends to the slug a separator (default: "-") and a random string (generated with the shortid module).
**example random**
```js
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you'
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you-Nyiy4wW9l'
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you-NJeskEPb5e'
```
Alternatively you can modify this behaviour and instead of appending a random string, an incremental counter will be used. For that to happen, you must use the parameter *slug_padding_size* specifying the total length of the counter:
**example counter**
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
mongoose.plugin(slug),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
subtitle: String,
slug: { type: String, slug: ["title", "subtitle"], slug_padding_size: 4, unique: true }
});
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you'
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you-0001'
mongoose.model('Resource').create({
title: 'Am I wrong, fallin\' in love with you!',
subtitle: "tell me am I wrong, well, fallin' in love with you"
}) // slug -> 'am-i-wrong-fallin-in-love-with-you-0002'
```
### Choose your own options
You can change any options adding to the plugin
```js
var mongoose = require('mongoose'),
slug = require('mongoose-slug-generator'),
options = {
separator: "-",
lang: "en",
truncate: 120
},
mongoose.plugin(slug, options),
Schema = mongoose.Schema,
schema = new Schema({
title: String,
subtitle: String,
slug: { type: String, slug: ["title", "subtitle"], unique: true }
});
```
You can find more options in the [speakingURL's npm page](https://www.npmjs.com/package/speakingurl)
## Support
This plugin is proudly supported by [Kubide](http://kubide.es/)