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-post
Add this hook to your Sails app:
$ npm install sails-hook-slugs
That's all!
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) {
// ...
});
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 - . |
MIT © 2019 Jérémie Ledentu