mirror of
https://github.com/abrendan/MicDropMessages.git
synced 2025-06-17 21:25:00 +02:00
98 lines
2.2 KiB
JavaScript
98 lines
2.2 KiB
JavaScript
// 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 => {
|
|
if (!ctx.options.parser.method) return;
|
|
return join(ctx.options.parser.method.map(one => {
|
|
return modern(require('method-override')(one));
|
|
}))(ctx);
|
|
},
|
|
|
|
ctx => {
|
|
if (!ctx.options.parser.body) return;
|
|
const body = require('body-parser').urlencoded(ctx.options.parser.body);
|
|
return modern(body)(ctx);
|
|
},
|
|
|
|
// JSON parser
|
|
ctx => {
|
|
if (!ctx.options.parser.json) return;
|
|
const json = require('body-parser').json(ctx.options.parser.json);
|
|
return modern(json)(ctx);
|
|
},
|
|
|
|
// Text parser
|
|
ctx => {
|
|
if (!ctx.options.parser.text) return;
|
|
const text = require('body-parser').text(ctx.options.parser.text);
|
|
return modern(text)(ctx);
|
|
},
|
|
|
|
// Data parser
|
|
ctx => {
|
|
if (!ctx.options.parser.data) return;
|
|
const data = require('express-data-parser')(ctx.options.parser.data);
|
|
return modern(data)(ctx);
|
|
},
|
|
|
|
// Cookie parser
|
|
ctx => {
|
|
if (!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;
|
|
},
|
|
]
|
|
};
|
|
|
|
module.exports = plugin;
|