1.3.2 • Published 6 years ago
express-rest-tools v1.3.2
Express Rest Tools
Install
npm install express-rest-tools- Configulation
- Throw error
- Resonse json format
- Sever scrips
- Utilities
- Middlewares
- API Documentation with swagger
Configulation
| Config key | Default | Type | Description |
|---|---|---|---|
| port | 4000 | Number | Development server port |
| corsOptions | {} | Object | Node.js CORS middleware |
| logger | false | Bool, Function | Create log format of each activities |
| fetchErrorHandler | false | Bool, Function | Handle api response that should be an error (Function must return boolean) |
| fetchMessageErrorHandler | false | Bool, Function | Handle error message from api response |
| reasons | Resons Types | Object | Reason code and message |
| swaggerDefinition | {} | Object | A document that defines or describes an API see more |
Setup and config app in server.js
import { setConfig, useRouter, startServer } from 'express-rest-tools'
import routes from './routes'
const reasons = {
6: 'Custom description',
7: 'Custom description'
}
const fetchErrorHandler = res => {
if (res.status !== 200) return true
return false
}
const fetchMessageErrorHandler = res => {
throw Object({
type: 6,
th: 'Message',
en: 'Message',
technical: 'Message'
})
}
const logger = (type, datas) => {
if (type === 'access') {
return { type }
}
if (type === 'activity') {
return { type }
}
if (type === 'response') {
return { type }
}
if (type === 'error') {
return { type }
}
}
setConfig({
port: 4000,
corsOptions: {},
reasons,
swaggerDefinition: {},
fetchErrorHandler,
fetchMessageErrorHandler,
logger
})
useRouter(routes)
startServer()Reasons Types
// Default
{
0: 'Success',
1: 'Failed to fetch service',
2: 'API error',
3: 'Validation rules error',
4: 'File system error',
5: 'Application error'
}
// Add
setConfig({
reasons: {
6: 'Custom descirption',
7: 'Custom descirption'
}
})Throw error
Use throw to return error message
throw Object({
type: 5, // Reason code
th: 'Message',
en: 'Message',
technical: 'Message'
})Resonse json format
{
"transactionID": "G2PC01RKZJSU42YEH-2019/03/04|15:57:44",
"serviceResult": {
"status": "ERROR",
"code": 1,
"description": "Failed to fetch service"
},
"message": {
"th": "Message",
"en": "Message",
"technical": "Message"
},
"data": null
}Server scripts
Dev server
$ npm run devProduction server
$ npm run startTesting
$ npm run test
$ npm run test:watchListing
$ npm run lintUtilities
| Name | Description |
|---|---|
| asyncHandler | Supported throw error in async function then the error will be handle by middleware |
| createFetcher | Fetching API and handle error (try/catch) under hood |
| useActivity | Log activity |
Example
Wrap controller function and use res({}) to return data
import { asyncHandler } from 'express-rest-tools/lib/utils'
const posts = asyncHandler((req, res) => {
const postData = []
res({
data: postData
})
})res({
headers: {},
data: any
})Use axios options
import { createFetcher } from 'express-rest-tools/lib/utils'
const fetchPosts = createFetcher({
method: 'get',
url: 'https://jsonplaceholder.typicode.com/posts'
})
const posts = await fetchPosts()Fetch soap
import { createFetcher } from 'express-rest-tools/lib/utils'
const fetchSoapAPI = createFetcher({
method: 'post',
headers: {
'Content-Type': 'text/xml;charset=UTF-8'
},
url: 'http://api',
data: `xml`
})
const soap = await fetchSoapAPI()import { useActivity } from 'express-rest-tools/lib/utils'
useActivity({ name: 'fetchPosts' })Middlewares
| Name | Description |
|---|---|
| cache | Cache response in memory |
| validate | Validate request with rules |
import { cache } from 'express-rest-tools/lib/middlewares'
// cache(duration)
router.get('/posts', cache(5000, 'prefix'), controller.posts)Clear Cache
import { clear, clearAll } from 'express-rest-tools/lib/middlewares/cache'
clear('prefix')
clearAll()import { validate } from 'express-rest-tools/lib/middlewares'
import Joi from 'joi'
// const rules = {
// query: {},
// params: {},
// body: {}
// }
const rules = {
query: {
name: Joi.string().required(),
age: Joi.number().required()
}
}
// Use a function to get request data
const rules = {
query: req => ({
name: Joi.string().required(),
age: Joi.number().required()
})
}
router.get('/posts', validate(rules), controller.posts)Add Middlewares
import { useMiddleware } from 'express-rest-tools'
useMiddleware(yourMiddleware)API Documentation
The Swagger UI page is https://server/api-docs
Example to write document with Swagger
/**
* @swagger
* /users:
* get:
* description: Returns users
* tags: [Users]
* parameters:
* - in: query
* name: "name"
* required: true
* type: "string"
* responses:
* 200:
* description: Success
*/
router.get('/users', controller)1.3.2
6 years ago
1.3.1
6 years ago
1.3.0
6 years ago
1.2.0
6 years ago
1.1.1
7 years ago
1.1.0
7 years ago
1.0.1
7 years ago
1.0.0
7 years ago
0.1.0-beta.4
7 years ago
0.1.0-beta.3
7 years ago
0.1.0-beta.2
7 years ago
0.1.0-beta.1
7 years ago