1 | var middleware = require('./middleware')
|
2 | var extend = require('../extend')
|
3 | var obfuscateUrlPassword = require('../obfuscateUrlPassword')
|
4 | var createDebug = require('debug')
|
5 | var debugRequest = createDebug('httpism:request')
|
6 | var debugResponse = createDebug('httpism:response')
|
7 | var isStream = require('../isStream')
|
8 |
|
9 | function logRequest (request) {
|
10 | if (debugRequest.enabled) {
|
11 | debugRequest(prepareForLogging(request))
|
12 | }
|
13 | }
|
14 |
|
15 | function logResponse (response) {
|
16 | if (!response.redirectResponse) {
|
17 | debugResponse(prepareForLogging(response))
|
18 | }
|
19 | }
|
20 |
|
21 | function prepareForLogging (r) {
|
22 | return removeUndefined({
|
23 | method: r.method,
|
24 | url: r.url && obfuscateUrlPassword(r.url),
|
25 | headers: r.headers,
|
26 | body: isStream(r.body) ? '[Stream]' : r.body,
|
27 | statusCode: r.statusCode,
|
28 | statusText: r.statusText
|
29 | })
|
30 | }
|
31 |
|
32 | function removeUndefined (obj) {
|
33 | Object.keys(obj).map(function (key) {
|
34 | if (typeof obj[key] === 'undefined') {
|
35 | delete obj[key]
|
36 | }
|
37 | })
|
38 |
|
39 | return obj
|
40 | }
|
41 |
|
42 | module.exports = middleware('log', function (request, next) {
|
43 | logRequest(request)
|
44 |
|
45 | var promise = next()
|
46 |
|
47 | if (debugResponse.enabled) {
|
48 | return promise.then(function (response) {
|
49 | logResponse(response)
|
50 | return response
|
51 | }, function (e) {
|
52 | var res = extend({}, e)
|
53 | logResponse(res)
|
54 | throw e
|
55 | })
|
56 | } else {
|
57 | return promise
|
58 | }
|
59 | })
|
60 |
|
61 | module.exports.logRequest = logRequest
|
62 | module.exports.logResponse = logResponse
|