forked from svrjs/svrjs
39 lines
1.1 KiB
JavaScript
39 lines
1.1 KiB
JavaScript
|
/* eslint-disable no-underscore-dangle */
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
const JSONParser = require('../parsers/JSON');
|
||
|
|
||
|
// the `options` is also available through the `this.options` / `formidable.options`
|
||
|
module.exports = function plugin(formidable, options) {
|
||
|
// the `this` context is always formidable, as the first argument of a plugin
|
||
|
// but this allows us to customize/test each plugin
|
||
|
|
||
|
/* istanbul ignore next */
|
||
|
const self = this || formidable;
|
||
|
|
||
|
if (/json/i.test(self.headers['content-type'])) {
|
||
|
init.call(self, self, options);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Note that it's a good practice (but it's up to you) to use the `this.options` instead
|
||
|
// of the passed `options` (second) param, because when you decide
|
||
|
// to test the plugin you can pass custom `this` context to it (and so `this.options`)
|
||
|
function init(_self, _opts) {
|
||
|
this.type = 'json';
|
||
|
|
||
|
const parser = new JSONParser(this.options);
|
||
|
|
||
|
parser.on('data', ({ key, value }) => {
|
||
|
this.emit('field', key, value);
|
||
|
});
|
||
|
|
||
|
parser.once('end', () => {
|
||
|
this.ended = true;
|
||
|
this._maybeEnd();
|
||
|
});
|
||
|
|
||
|
this._parser = parser;
|
||
|
}
|