mirror of https://github.com/sundowndev/http.git
feat: `debug` option (#109)
parent
11d0b81657
commit
874b668e1e
|
@ -46,6 +46,12 @@ Environment variable `API_URL_BROWSER` can be used to **override** `browserBaseU
|
|||
|
||||
If set to `true`, `http://` in both `baseURL` and `browserBaseURL` will be changed into `https://`.
|
||||
|
||||
## `debug`
|
||||
|
||||
* Default: `false`
|
||||
|
||||
Adds interceptors that logs http request and responses.
|
||||
|
||||
## `proxy`
|
||||
|
||||
* Default: `false`
|
||||
|
|
|
@ -30,9 +30,6 @@ function httpModule (_moduleOptions) {
|
|||
defaultHost = 'localhost'
|
||||
}
|
||||
|
||||
// Default prefix
|
||||
const prefix = process.env.API_PREFIX || moduleOptions.prefix || '/'
|
||||
|
||||
// Support baseUrl
|
||||
if (moduleOptions.baseUrl && !moduleOptions.baseURL) {
|
||||
moduleOptions.baseURL = moduleOptions.baseUrl
|
||||
|
@ -40,6 +37,9 @@ function httpModule (_moduleOptions) {
|
|||
delete moduleOptions.baseUrl
|
||||
}
|
||||
|
||||
// Default prefix
|
||||
const prefix = process.env.API_PREFIX || moduleOptions.prefix || '/'
|
||||
|
||||
// HTTPS
|
||||
const https = Boolean(this.options.server && this.options.server.https)
|
||||
|
||||
|
@ -47,6 +47,7 @@ function httpModule (_moduleOptions) {
|
|||
const options = {
|
||||
baseURL: `http://${defaultHost}:${defaultPort}${prefix}`,
|
||||
browserBaseURL: undefined,
|
||||
debug: false,
|
||||
proxyHeaders: true,
|
||||
proxyHeadersIgnore: ['accept', 'host', 'cf-ray', 'cf-connecting-ip', 'content-length', 'content-md5', 'content-type'],
|
||||
proxy: false,
|
||||
|
|
|
@ -55,7 +55,7 @@ class HTTP {
|
|||
create(options) {
|
||||
const { retry, timeout, prefixUrl, headers } = this._defaults
|
||||
|
||||
return new HTTP(defu(options, { retry, timeout, prefixUrl, headers }))
|
||||
return createHttpInstance(defu(options, { retry, timeout, prefixUrl, headers }))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,6 +105,61 @@ for (let method of ['get', 'head', 'delete', 'post', 'put', 'patch']) {
|
|||
}
|
||||
}
|
||||
|
||||
const createHttpInstance = options => {
|
||||
// Create new HTTP instance
|
||||
const http = new HTTP(options)
|
||||
|
||||
// Setup interceptors
|
||||
<% if (options.debug) { %>setupDebugInterceptor(axios) <% } %>
|
||||
|
||||
return http
|
||||
}
|
||||
|
||||
<% if (options.debug) { %>
|
||||
const log = (level, ...messages) => console[level]('[Http]', ...messages)
|
||||
|
||||
const setupDebugInterceptor = http => {
|
||||
// request
|
||||
http.onRequest(req => {
|
||||
log(
|
||||
'info',
|
||||
'Request:',
|
||||
'[' + req.method.toUpperCase() + ']',
|
||||
req.url
|
||||
)
|
||||
|
||||
if (process.browser) {
|
||||
console.log(req)
|
||||
} else {
|
||||
console.log(JSON.stringify(req, undefined, 2))
|
||||
}
|
||||
})
|
||||
|
||||
// response
|
||||
http.onResponse(req, options, res => {
|
||||
log(
|
||||
'info',
|
||||
'Response:',
|
||||
'[' + (res.status + ' ' + res.statusText) + ']',
|
||||
'[' + req.method.toUpperCase() + ']',
|
||||
res.url,
|
||||
)
|
||||
|
||||
if (process.browser) {
|
||||
console.log(req, options, res)
|
||||
} else {
|
||||
console.log(JSON.stringify({ req, options, res }, undefined, 2))
|
||||
}
|
||||
|
||||
return res
|
||||
})
|
||||
|
||||
// error
|
||||
http.onError(error => {
|
||||
log('error', 'Error:', error)
|
||||
})
|
||||
}<% } %>
|
||||
|
||||
export default (ctx, inject) => {
|
||||
// prefixUrl
|
||||
const prefixUrl = process.browser
|
||||
|
@ -137,8 +192,7 @@ export default (ctx, inject) => {
|
|||
defaults.headers['accept-encoding'] = 'gzip, deflate'
|
||||
}
|
||||
|
||||
// Create new HTTP instance
|
||||
const http = new HTTP(defaults)
|
||||
const http = createHttpInstance(defaults)
|
||||
|
||||
// Inject http to the context as $http
|
||||
ctx.$http = http
|
||||
|
|
Loading…
Reference in New Issue