4.0.1-beta.1 • Published 5 years ago
sails-hook-slugs v4.0.1-beta.1
sails-hook-slugs
This Sails.js hook generates URL-friendly slugs in your models.
http://www.myblog.com/post/233987
-> http://www.myblog.com/post/title-of-my-blog-postInstallation
Add this hook to your Sails app:
$ npm install sails-hook-slugsThat's all!
Usage
Add an attribute of type slug in a model:
module.exports = {
attributes: {
title: {
type: 'string',
required: true,
unique: true
},
content: {
type: 'text'
},
slug: {
type: 'slug',
from: 'title',
blacklist: ['search']
}
}
};Configure your slug attribute:
from: name of the attribute from which the slug will be defined (required)blacklist: A list of reserved words to not use as this slug (optional)
A slug attribute is automatically set when you create a record:
Post.create({
title: 'This is a new post!!!',
content: 'Post content'
})
.then(function(post) {
console.log(post.slug); // 'this-is-a-new-post'
});If a record of the same model has the same slug, a UUID is added at the end of the new slug:
Post.create({
title: 'This is a new post!!!!',
content: 'A new post again'
})
.then(function(post) {
console.log(post.slug); // 'this-is-a-new-post-a50ec97e-9ae1-44a5-8fb2-81c665b61538'
});Like any other attribute, you can use it as criteria to find a given resource:
Post.findOne({ slug: 'this-is-a-new-post' })
.then(function(post) {
// Use the post
})
.catch(function(err) {
// ...
});Configuration
These parameters can be changed in sails.config.slugs:
| Parameter | Type | Details |
|---|---|---|
| lowercase | boolean | Whether or not the generated slugs are lowercased. Defaults to true. |
| blacklist | Array<string> | A list of reserved words to not use as slugs in your application. Defaults to []. |
| separator | string | Separator to use in slugs. Defaults to -. |
License
MIT © 2019 Jérémie Ledentu