tipi-services
Version:
Node.js library to access wrapping REST API of tipi backend services
50 lines (47 loc) • 1.32 kB
JavaScript
const request = require('request-promise-native')
const _ = require('lodash')
const ValidateEndpoint = require('./ValidateEndpoint')
const QueryParamsMaker = require('./QueryParamsMaker')
module.exports = async ({ endpoint, query, params, body, formData, headers } = {}) => {
// validate data
if (endpoint.schema) {
ValidateEndpoint({ query, params, body }, endpoint.schema)
}
// put params
let uri = endpoint.uri
_.each(params, (value, key) => {
uri = uri.replace(`:${key}`, value)
})
// put query
if (!_.isEmpty(query)) {
const queryParams = QueryParamsMaker(query)
uri = `${uri}?${queryParams}`
}
// create requestData
const requestData = {
method: endpoint.method,
uri,
json: true
}
if (body) {
requestData.body = body
} else if (formData) {
requestData.formData = formData
requestData.headers = {
'content-type': 'multipart/form-data'
}
}
// put headers
if(headers){
requestData.headers = {...requestData.headers,...headers}
}
// call request and return
try {
const response = await request(requestData)
if (response && response.data) return response.data
return response
} catch (e) {
if (e.error && e.error.error) throw e.error.error
throw e
}
}