UNPKG

3.88 kBJavaScriptView Raw
1var Client = module.exports
2
3var Promise = require("bluebird")
4//var request = require("request")
5var routes = require("../routes")
6var axios = require("axios")
7
8var d = require("debug")("raptorjs:client:http")
9
10Client.create = function (container) {
11
12 var emit = function() {
13 container.emit.apply(container, arguments)
14 }
15
16 var opts = container.config
17
18 var addDefaultHeaders = function(opts, token) {
19 if(!opts.headers) {
20 opts.headers = { "Content-Type": "application/json" }
21 }
22 if(token) {
23 opts.headers.Authorization = `Bearer ${token}`
24 }
25 }
26
27 var defaultsOptions = {
28 baseURL: opts.url
29 //json: true,
30 //debug: opts.debug
31 }
32
33 addDefaultHeaders(defaultsOptions)
34
35 //var client = request.defaults(defaultsOptions)
36 console.log('using axios')
37 var client = axios.create(defaultsOptions)
38
39 d("Created new client %s", defaultsOptions.baseURL)
40
41 var instance = {}
42
43 instance.baseRequest = (options) => {
44 return new Promise(function (resolve, reject) {
45
46 options.headers = Object.assign({}, defaultsOptions.headers || {}, options.headers || {})
47
48 d("Performing request %j", options)
49 client(options).then((res) => {
50
51 var json
52 try {
53 json = JSON.parse(res.data)
54 } catch(e) {
55 json = res.data
56 }
57
58 if(res.status >= 400 || res.status < 200) {
59
60 if (res.status === 0) {
61 res.statusMessage = "Cannot perform request"
62 }
63
64 let error = {
65 code: json ? json.code : res.status,
66 message: json ? json.message : res.statusText
67 }
68
69 if (res.data) {
70 d("Error body: \n %j", res.data)
71 }
72
73 d("Request error %s %s", error.code, error.message)
74
75 emit("request.error", error)
76 emit("request.complete", false)
77
78 const err = new Error(error.message)
79 err.code = error.code
80
81 return reject(err)
82 }
83
84 d("Request response: %j", json)
85
86 emit("request.complete", json)
87 resolve(json)
88 }).catch(function (error) {
89 console.error(error.code)
90 return reject(error)
91 })
92
93 })
94 }
95
96 instance.request = function (options) {
97
98 // do not try to login if requesting login / get user
99 var userReq = (
100 options.url === routes.LOGIN ||
101 options.url === routes.USER_GET_ME ||
102 options.url === routes.REFRESH_TOKEN
103 ) ?
104 Promise.resolve() : container.Auth().loadUser()
105
106 emit("request.start", options)
107
108 return userReq.then(function () {
109
110 if(container.Auth().getToken()) {
111 addDefaultHeaders(options, container.Auth().getToken())
112 }
113
114 return instance.baseRequest(options)
115 })
116
117 }
118
119 instance.get = function (url) {
120 return instance.request({
121 method: "GET",
122 url: url
123 })
124 }
125
126 instance.delete = function (url) {
127 return instance.request({
128 method: "DELETE",
129 url: url
130 })
131 }
132
133 instance.put = function (url, data) {
134 return instance.request({
135 method: "PUT",
136 url: url,
137 data: data
138 })
139 }
140
141 instance.post = function (url, data) {
142 return instance.request({
143 method: "POST",
144 url: url,
145 data: data
146 })
147 }
148
149 instance.client = client
150
151 return instance
152}