Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/arfedulov/koa-jsonapi-controllers
jsonapi controllers for koa
https://github.com/arfedulov/koa-jsonapi-controllers
Last synced: about 1 month ago
JSON representation
jsonapi controllers for koa
- Host: GitHub
- URL: https://github.com/arfedulov/koa-jsonapi-controllers
- Owner: arfedulov
- Created: 2019-11-09T06:54:35.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2019-11-09T10:51:47.000Z (about 5 years ago)
- Last Synced: 2024-11-18T10:57:04.044Z (about 2 months ago)
- Language: TypeScript
- Size: 79.1 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# koa-jsonapi-controllers
jsonapi controllers for koa.
## Installation
```
yarn add @arfedulov/koa-jsonapi-controllers
```## Usage
```ts
import Koa, { Context } from 'koa';
// jsonapi error-handling middleware
import { jsonApiErrors } from '@arfedulov/koa-jsonapi-errors';import {
BaseController,
createMainRequestHandler,
JsonapiContext,
} from '@arfedulov/koa-jsonapi-controllers';const app = new Koa();
// Each your controller should extend BaseController
class UserController extends BaseController {
// jsonapi resource type
name = 'users';// overwrite any method you want
// the default implementation throws NotFound error
getSingleResource = async (ctx: JsonapiContext) => {
//
}
}class PostController extends BaseController {
name = 'posts';getSingleResource = async (ctx: JsonapiContext) => {
//
}
}const userController = new UserController();
const postController = new PostController();const requestHandler = createMainRequestHandler([ userController, postController ]);
app.use(jsonApiErrors);
app.use(requestHandler);
```As this module throws errors, it is recommended to use it with *@arfedulov/koa-jsonapi-errors*
middleware. In this case you'll get automatically generated valid jsonapi error responses.```ts
app.use(jsonApiErrors);
app.use(requestHandler);
```Look at `BaseController` source code for the rest of possible request handlers.
You will probably need an access to jsonapi url parameters and url-queries.
Those are exposed on `ctx` argument passed to each request handler. *@arfedulov/json-api-url-parser*
module is used for parsing url into `ctx.[JSON_API_URL_PARAMS_KEY]`. Look the docs for [json-api-url-parser](https://github.com/arfedulov/json-api-url-parser#readme) for the list of available parameters.```ts
import {
BaseController,
createMainRequestHandler,
JsonapiContext,
JSON_API_URL_PARAMS_KEY,
} from '@arfedulov/koa-jsonapi-controllers';class PostController extends BaseController {
name = 'posts';getSingleResource = async (ctx: JsonapiContext) => {
const jsonapiParams = ctx[JSON_API_URL_PARAMS_KEY];
// ......
}
}