index.js
1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var isJSON = require('koa-is-json');
var Stringify = require('streaming-json-stringify');
var hasOwnProperty = Object.hasOwnProperty
/**
* Pretty JSON response middleware.
*
* - `pretty` default to pretty response [true]
* - `param` optional query-string param for pretty responses [none]
*
* @param {Object} opts
* @return {GeneratorFunction}
* @api public
*/
module.exports = function(opts){
var opts = opts || {};
var param = opts.param;
var pretty = null == opts.pretty ? true : opts.pretty;
var spaces = opts.spaces || 2;
return function filter(ctx, next){
return next().then(() => {
var body = ctx.body;
// unsupported body type
var stream = body
&& typeof body.pipe === 'function'
&& body._readableState
&& body._readableState.objectMode;
var json = isJSON(body);
if (!json && !stream) return;
// query
var hasParam = param && hasOwnProperty.call(ctx.query, param);
var prettify = pretty || hasParam;
// always stringify object streams
if (stream) {
ctx.response.type = 'json';
var stringify = Stringify();
if (prettify) stringify.space = spaces;
ctx.body = body.pipe(stringify);
return;
}
// prettify JSON responses
if (json && prettify) {
return ctx.body = JSON.stringify(body, null, spaces);
}
});
}
};