0.1.3 • Published 7 years ago
koa-sequelize-resource v0.1.3
koa-sequelize-resource
RESTful API based on Sequelize and support ES2015.
Installation
npm install koa-sequelize-resource -S
Usage
import Koa from 'koa'
import Router from 'koa-sequelize-resource'
import models from './models/'
const app = new Koa()
const router = Router(models)
router
.crud('/user', (resources) => resources.User)
.crud('user/:uid/posts', (resources) => resources.User.relations('Posts', 'uid'))
// or
.define('user/:uid/posts', (resources) => ({
index: resources.User.relations('Posts', 'uid').index(),
create: resources.User.relations('Posts', 'uid').create(),
}))
.define('user/:uid/posts/:id', (resources) => ({
update: resources.User.relations('Posts', 'uid').update(),
destroy: resources.User.relations('Posts', 'uid').destroy(),
}))
app
.use(async (ctx, next) => {
await router.routes()(ctx, next)
})
const server = http.createServer(app.callback())
app.listen(3000)
Basic request
Pagination
- Request head:
content-range: 'items 10-30/20'
- Response:
HTTP/1.1 206 Partial Content
content-range: 'items 10-25/20'
- Sometimes, we do not wish calculate the records count:
router.define('orders', resources => resources.orders.index({ disableCount: true })
Order by
- Request:
/users?orderby=-username
/users?orderby=email
- Response:
[
{ username: 'Bill', email: 'bill@who.com' },
{ username: 'Anna', email: 'anna@who.com' },
]
[
{ username: 'Anna', email: 'anna@who.com' },
{ username: 'Bill', email: 'bill@who.com' },
]
Middlewares
router
.crud('/user', someMiddlewares, resources => resources.user)
.define('/user/:uid/posts', someMiddlewares, resources => ({
...
}))
Running Test
npm test