Skip to content

A Sails.js hook to add URL-friendly slugs in your models.

Notifications You must be signed in to change notification settings

jledentu/sails-hook-slugs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sails-hook-slugs

Build Status Coverage Status dependencies Status npm

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

Installation

Add this hook to your Sails app:

$ npm install sails-hook-slugs

That'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