0.2.0 • Published 4 years ago

@axolo/sequelize-query v0.2.0

Weekly downloads
1
License
MIT
Repository
github
Last release
4 years ago

Sequelize Query

Generate Sequelize options by program, querystring, http or curl.

Convert Sequelize operators Aliases to Sequelize operators Symbol.

AliasSymbol
$or[Sequelize.Op.or]
$and[Sequelize.Op.and]
$ne[Sequelize.Op.ne]
$between[Sequelize.Op.between]
......

install

npm install @axolo/sequelize-query --save

test

npm run test

use by program see in test

API

WARNING: only support version >= 0.1.0

sequelizeQuery(query, params = {})

parameters

NameTypeRequiredDescription
queryObjecttruequery (where with alias) for convert
params.SequelizeObjectSequelize, default to builtin
params.optionsObjectSequelize querying options
params.keysObjectomit values of keys in where
params.excludeOpsArrayomit Sequelize Op alias

default to options

{
  offset: 0,
  limit: 1000,
}

default to keys

{
  attributes: 'attributes',
  include: 'include',
  where: 'where',
  order: 'order',
  offset: 'offset',
  limit: 'limit',
}

default to excludeOps

[]

return

TypeDescription
ObjectSequelize querying options with operators Symbol

usage

A example of Egg.js at /app/controller/user.js by RESTful style router.

controller

'use strict';

const qs = require('qs');
const sequelizeQuery = require('@axolo/sequelize-query');
const Controller = require('egg').Controller;

class SequelizeQueryController extends Controller {
  async index() {
    const { app, ctx } = this;
    const { querystring } = ctx.request;
    const query = qs.parse(querystring);
    const options = sequelizeQuery(query, {
      Sequelize: app.Sequelize,
      logging: console.log,
      distinct: true,
      subQuery: false,
    });
    const user = await ctx.model.User.findAll(options);
    ctx.body = user;
  }

  async create() {
    const { app, ctx } = this;
    const { body } = ctx.request;
    const options = sequelizeQuery(body, {
      Sequelize: app.Sequelize,
      logging: console.log,
    });
    const user = await ctx.model.User.findAll(options);
    ctx.body = user;
  }
}

module.exports = SequelizeQueryController;

request

GET

/user?where={"username":{"$like":"%25ming%25"}}&limit=5&order=[["createdAt","desc"],["updatedAt","asc"]]

MUST encodeURIComponent querystring by url

POST

curl -X POST '/user' \
-H 'Content-Type: application/json' \
-d '{
  "where": { "username": { "$like": "%ming%" } },
  "order": [[ "createdAt", "desc" ], ["updatedAt", "asc" ]],
  "limit": 5
}'

response

[
  {
    "id": "e54160d0-ffa3-11e9-961a-013b0b64d1f2",
    "username": "yueming",
    "password": "password",
    "status": 0,
    "createdAt": "2019-11-05T08:11:40.000Z",
    "updatedAt": "2019-11-05T08:11:40.000Z",
    "deletedAt": null
  }
]

SQL

SQL from Sequelize

SELECT `id`, `username`, `password`, `status`, `createdAt`, `updatedAt`, `deletedAt`
FROM `user` AS `user`
WHERE (`user`.`deletedAt` IS NULL AND `user`.`username` LIKE '%ming%')
ORDER BY `user`.`createdAt` DESC, `user`.`updatedAt` ASC
LIMIT 0, 5;