JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7
  • Score
    100M100P100Q46724F
  • License MIT

HK Byte Library for HK WebAPI Server

Package Exports

  • @hkbyte/webapi

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@hkbyte/webapi) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@hkbyte/webapi

A WebAPI oriented NodeJS server

Features :

  • Built-in validation support
  • Multipart/Form-data support
  • HTTP friendly errors
  • Express middleware support
  • Built-in typescript declarations

Let's Create Server :

import { WebApiServer } from '@hkbyte/webapi'

const port = 3000
const server = new WebApiServer(port)

server.start().then((port) => {
    console.log(`Server listening on port: ${port}`)
})

WebApiServer options:
const server = new WebApiServer(port, {
    cors: boolean, // optional, default false
    corsOptions: {}, // optional
    helmet: true, // optional, applies express-helmet plugin to all apis, default false
    helmetOptions: {}, // optional
})

for corsOptions refer here for helmetOptions refer here


Register Express Middleware :

const server = new WebApiServer(port)
server.addMiddlewares(middleware_1, middleware_2, ..., middleware_n)

Create WebAPI (REST-API) :

import { WebApiServer, WebApi } from '@hkbyte/webapi'

const server = new WebApiServer(port)

const apiAdminList = new WebApi({
    method: 'GET',
    endpoint: '/admin/list',
    handler: async () => {
        const adminList = await db.fetchAllAdmins()
        return adminList
    },
})

/**
 * Register webApi into our server
 * */
server.addWebApis(apiAdminList, ...)

handler() function takes responsibility of sending response data. By default if request executes successfully it will send HTTP Status Code 200.


WebApi options:
const api1 = new WebApi(port, {
    method: 'POST', // 'GET', 'POST', 'PUT', 'PATCH', 'DELETE',
    endpoint: 'product/add' // path with params,
    requestType: 'JSON' // optional 'JSON'(default), 'FORM_DATA_MULTIPART',
    requestBodySchema: TypeObject // body validation schema
    hideErrorStack: false // default true when NODE_ENV = 'production'
    middlewares: [middleware1, middleware2] // API level middlewares
    handler: (context) => {
        const params = context.params // request path params
        const query = context.query // request query string in object
        const body = context.body // request body

        /**
         * Logic goes here
         */

        return responseData
    }
})

WebApi example:
import { T, WebApi} from '@hkbyte/webapi'

const apiStudentAdd = new WebApi(port, {
    method: 'POST',
    endpoint: 'student/add'
    requestType: 'JSON'
    requestBodySchema: T.object({
        name: T.string().max(50),
        age: T.number().positive(),
    })
    handler: ({ body }) => {
        const newStudent = db.createStudent({
            name: body.name,
            age: body.age,
        })

        return newStudent
    }
})