Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | 27x 27x 27x 103x 104x 104x 416x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 104x 1x 1x 27x | // Parser plugin
// Get the raw request and transform it into something usable
// Examples: ctx.body, ctx.files, etc
const join = require('../../src/join');
const modern = require('../../src/modern');
const plugin = {
name: 'parser',
options: {
body: {
type: [Object, Boolean],
default: { extended: true },
extend: true
},
json: {
type: [Object, Boolean],
default: {}
},
text: {
type: Object,
default: {}
},
data: {
type: Object,
default: {}
},
cookie: {
type: Object,
default: {}
},
method: {
type: [Object, String, Boolean],
default: [
'X-HTTP-Method',
'X-HTTP-Method-Override',
'X-Method-Override',
'_method'
],
// Coerce it into an Array if it is not already
clean: value => typeof value === 'string' ? [value] : value
}
},
// It is populated in "init()" right now:
before: [
ctx => {
Iif (!ctx.options.parser.method) return;
return join(ctx.options.parser.method.map(one => {
return modern(require('method-override')(one));
}))(ctx);
},
ctx => {
Iif (!ctx.options.parser.body) return;
const body = require('body-parser').urlencoded(ctx.options.parser.body);
return modern(body)(ctx);
},
// JSON parser
ctx => {
Iif (!ctx.options.parser.json) return;
const json = require('body-parser').json(ctx.options.parser.json);
return modern(json)(ctx);
},
// Text parser
ctx => {
Iif (!ctx.options.parser.text) return;
const text = require('body-parser').text(ctx.options.parser.text);
return modern(text)(ctx);
},
// Data parser
ctx => {
Iif (!ctx.options.parser.data) return;
const data = require('upload-files-express')(ctx.options.parser.data);
return modern(data)(ctx);
},
// Cookie parser
ctx => {
Iif (!ctx.options.parser.cookie) return;
const cookie = require('cookie-parser')(
ctx.options.secret,
ctx.options.parser.cookie
);
return modern(cookie)(ctx);
},
// Add a reference from ctx.req.body to the ctx.data and an alias
ctx => {
ctx.data = ctx.body;
},
// Fix the IP for heroku and similars
ctx => {
const forwarded = ctx.headers['x-forwarded-for'];
if (!forwarded) return;
const ip = forwarded.trim().split(/,\s?/g).shift();
Object.defineProperty(ctx, 'ip', { enumerable: true, value: ip });
},
]
};
module.exports = plugin;
|