-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathmiddleware.js
46 lines (41 loc) · 1017 Bytes
/
middleware.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
'use strict';
var expressMiddleware = require('webpack-dev-middleware');
function middleware(doIt, req, res) {
var originalEnd = res.end;
return function (done) {
res.end = function () {
originalEnd.apply(this, arguments);
done(null, 0);
};
doIt(req, res, function () {
done(null, 1);
});
};
}
module.exports = function (compiler, option) {
var doIt = expressMiddleware(compiler, option);
return function*(next) {
var ctx = this;
var req = this.req;
var url = this.url;
if (url === '/') {
return yield next;
}
var isHTML = /\.html?$/.test(url.split('?')[0]);
var runNext = yield middleware(doIt, req, {
end: function (content) {
// 添加 html fix
if (isHTML) {
content = ctx.htmlPrefix + content + ctx.htmlPostfix;
}
ctx.body = content;
},
setHeader: function () {
ctx.set.apply(ctx, arguments);
}
});
if (runNext) {
yield *next;
}
};
};