-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
65 lines (55 loc) · 1.31 KB
/
index.js
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
'use strict';
/*!
* multer
* Copyright(c) 2014 Hage Yaapa
* Copyright(c) 2015 Fangdun Cai
* Copyright(c) 2017 Hirako2000
* MIT Licensed
*/
/**
* Module dependencies.
*/
const multerFields = ['file', 'files', 'body'];
const originalMulter = require('multer');
function multer(options) {
const m = originalMulter(options);
const _makeMiddleware = m._makeMiddleware.bind(m);
m._makeMiddleware = makePromise(_makeMiddleware);
const any = m.any.bind(m);
m.any = makePromise(any);
return m
}
function makePromise(fn) {
return (fields, fileStrategy) => {
return function *(next) {
yield promise(this);
yield next;
};
function promise(ctx) {
return new Promise((resolve, reject) => {
fn(fields, fileStrategy)(ctx.req, ctx.res, (err) => {
if (err) {
reject(err)
} else {
copyFields(ctx);
resolve(ctx)
}
})
});
}
}
}
function copyFields(ctx) {
let req = ctx.req;
let len = multerFields.length;
let field;
for (let i = 0; i < len; i ++) {
field = multerFields[i];
if (req.hasOwnProperty(field)) {
ctx[field] = req[field];
}
}
}
multer.diskStorage = originalMulter.diskStorage;
multer.memoryStorage = originalMulter.memoryStorage;
exports = module.exports = multer;