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
}
})