sails-hook-query-builder

1.0.3 • Public • Published

Sails Hook Query Builder

build status

Query builder adds a static method to all models in a sails app that allows creates a query which will paginate, search and sort.

To use

  • Add "sails-hook-cws-query-builder" to package.json of project. Sails will automatically pick this up when invoking.
  • Add searchable parameter to models e.g. in models/Log.js
module.exports = {
    connection: 'mongo',
    tableName: 'log',
    searchable: ['level','message','meta.auditFlag'],
    attributes: {
        message: {
            type: 'string'
        },
        level: {
            type: 'string'
        },
        meta: {
            type: 'json'
        }
    }
};

Build query

This will allow queries to be built with:

var query = Log.queryBuilder(_.merge(req.query, {
    customQuery: {
        'meta.audit': true
    }
})); 
 
//Expected query items are search, limit, skip and sort.
//**CustomQuery** are queries not associated with search, pagination or sort

if req url was:

/log?search=smith&limit=1&sort=user

then the returned query object would be:

{
    where : {
        or : [
            {
                message : {
                    contains : 'smith'
                }
            },
            {
                level : {
                    contains : 'smith'
                }
            },
            {
                meta.auditFlag : {
                    contains : 'smith'
                }
            },
        ]
    },
    limit: 1,
    sort: 'user'
}

Search via waterline from query

return Log.querySearch(_.merge(req.query, {
    customQuery: {
        'meta.audit': true
    }
})); 

will return:

{
    count: 2,
    data: [
        {
            level: 'info',
            message: 'New message',
            meta: {
                message: 'Resolver'
            }
        },
        {
            level: 'error',
            message: 'Second message',
            meta: {
                message: 'Incorrect'
            }
        }
    ]
}

Native request queries

  • ?sort=name will sort against any property
  • ?search=message:smith will search against a single property and value (delimited by :)
  • ?search=smith will search against any property
  • ?limit=10 will limit the results returned
  • ?skip=20 will skip a defined number of results (used in pagination)

Readme

Keywords

none

Package Sidebar

Install

npm i sails-hook-query-builder

Weekly Downloads

3

Version

1.0.3

License

MIT

Last publish

Collaborators

  • caljrimmer