https://github.com/jledentu/sails-hook-slugs
A Sails.js hook to add URL-friendly slugs in your models.
https://github.com/jledentu/sails-hook-slugs
rest-api sails sails-hook
Last synced: about 2 months ago
JSON representation
A Sails.js hook to add URL-friendly slugs in your models.
- Host: GitHub
- URL: https://github.com/jledentu/sails-hook-slugs
- Owner: jledentu
- Created: 2015-11-24T22:16:14.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2020-12-20T23:01:48.000Z (over 4 years ago)
- Last Synced: 2025-03-24T09:38:23.697Z (2 months ago)
- Topics: rest-api, sails, sails-hook
- Language: JavaScript
- Homepage:
- Size: 40 KB
- Stars: 9
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# sails-hook-slugs
[](https://travis-ci.org/jledentu/sails-hook-slugs) [](https://coveralls.io/github/jledentu/sails-hook-slugs) [](https://david-dm.org/jledentu/sails-hook-slugs) [](https://www.npmjs.com/package/sails-hook-slugs)
This [Sails.js](https://github.com/balderdashy/sails) 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:
```shell
$ npm install sails-hook-slugs
```That's all!
## Usage
Add an attribute of type `slug` in a model:
```js
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:
```js
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:
```js
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:
```js
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` | 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