vanilla-jet 1.0.3 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/framework/router.js +104 -97
- package/package.json +1 -1
package/framework/router.js
CHANGED
|
@@ -16,6 +16,7 @@ function Router(server) {
|
|
|
16
16
|
};
|
|
17
17
|
this.defaultRoute = '';
|
|
18
18
|
this.server = server;
|
|
19
|
+
this.cwd = process.cwd();
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
Router.prototype.routeToRegExp = function(route) {
|
|
@@ -56,20 +57,41 @@ Router.prototype.removeRoute = function(method, route) {};
|
|
|
56
57
|
|
|
57
58
|
Router.prototype.onRequest = function(req, res) {
|
|
58
59
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
let obj = this;
|
|
61
|
+
let isMatch = false;
|
|
62
|
+
let zlib = require('zlib');
|
|
63
|
+
let response = new Response(res);
|
|
64
|
+
let request = new Request(req, {
|
|
65
|
+
onDataReceived: function() {
|
|
66
|
+
|
|
67
|
+
console.log(request.path);
|
|
68
|
+
if (request.path == obj.server.options.base_url) {
|
|
69
|
+
request.path = obj.server.options.base_url + obj.defaultRoute;
|
|
70
|
+
}
|
|
71
|
+
console.log(request.path);
|
|
72
|
+
|
|
73
|
+
// Try with the routes for the current method (get or post)
|
|
74
|
+
_.each(obj.routes[request.type], function(route) {
|
|
75
|
+
if ( request.path.match(route.regexp) ) {
|
|
76
|
+
|
|
77
|
+
var parts = route.handler.split('.'),
|
|
78
|
+
clazz = parts[0],
|
|
79
|
+
method = parts[1],
|
|
80
|
+
callback = obj.validateCallback(clazz, method);
|
|
81
|
+
|
|
82
|
+
if (callback && callback != undefined && callback != '') {
|
|
83
|
+
|
|
84
|
+
isMatch = true;
|
|
85
|
+
handled = callback(request, response, obj.server);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
69
88
|
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
// If not handled yet, try with the wildcard ones
|
|
92
|
+
if (!handled) {
|
|
93
|
+
_.each(obj.routes['*'], function(route) {
|
|
70
94
|
|
|
71
|
-
// Try with the routes for the current method (get or post)
|
|
72
|
-
_.each(obj.routes[request.type], function(route) {
|
|
73
95
|
if ( request.path.match(route.regexp) ) {
|
|
74
96
|
|
|
75
97
|
var parts = route.handler.split('.'),
|
|
@@ -85,99 +107,84 @@ Router.prototype.onRequest = function(req, res) {
|
|
|
85
107
|
}
|
|
86
108
|
}
|
|
87
109
|
});
|
|
110
|
+
}
|
|
88
111
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
112
|
+
// No route catched, maybe it's a static content
|
|
113
|
+
// or not handled? Well, at this point we call 404
|
|
114
|
+
if (handled == false && isMatch == false ) {
|
|
115
|
+
|
|
116
|
+
var path = require('path'),
|
|
117
|
+
ext = path.extname(req.url).replace('.', ''),
|
|
118
|
+
extHandled = false,
|
|
119
|
+
extHeader = {};
|
|
120
|
+
var mimes = {
|
|
121
|
+
|
|
122
|
+
'png' : 'image/png',
|
|
123
|
+
'webp': 'image/webp',
|
|
124
|
+
'jpg' : 'image/jpg',
|
|
125
|
+
'css' : 'text/css',
|
|
126
|
+
'gz' : 'application/x-gzip',
|
|
127
|
+
'gif' : 'image/gif',
|
|
128
|
+
'js' : 'text/javascript',
|
|
129
|
+
'svg' : 'image/svg+xml',
|
|
130
|
+
'ttf' : 'application/x-font-ttf',
|
|
131
|
+
'otf' : 'application/x-font-opentype',
|
|
132
|
+
'pdf' : 'application/pdf',
|
|
133
|
+
'json' : 'application/json'
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
var compressionMimes = {
|
|
137
|
+
'css' : 'text/css',
|
|
138
|
+
'js' : 'text/javascript',
|
|
139
|
+
'gz' : 'application/x-gzip'
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
if (mimes[ext] != undefined && mimes[ext] != 'undefined') {
|
|
143
|
+
|
|
144
|
+
extHandled = true;
|
|
145
|
+
extHeader = {'Content-Type': mimes[ext]};
|
|
146
|
+
}
|
|
94
147
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
148
|
+
if (extHandled) {
|
|
149
|
+
|
|
150
|
+
let fs = require('fs'),
|
|
151
|
+
rep = obj.cwd.replace('core/framework', ''),
|
|
152
|
+
route = request.path.replace(obj.server.options.base_url, ''),
|
|
153
|
+
filename = path.join(rep, route),
|
|
154
|
+
filePrivate = obj.isProtectedFile(route);
|
|
155
|
+
|
|
156
|
+
console.log(rep);
|
|
157
|
+
console.log(route);
|
|
158
|
+
console.log(filename);
|
|
159
|
+
console.log("-------------");
|
|
160
|
+
|
|
161
|
+
fs.exists(filename, function(exists) {
|
|
162
|
+
|
|
163
|
+
if (exists && !filePrivate) {
|
|
164
|
+
|
|
165
|
+
var acceptEncoding = (req.headers['accept-encoding'] != undefined) ? req.headers['accept-encoding'] : '';
|
|
166
|
+
var fileStream = fs.createReadStream(filename);
|
|
167
|
+
if (acceptEncoding.match(/\bgzip\b/) && compressionMimes[ext] != undefined) {
|
|
168
|
+
extHeader['Content-Encoding'] = 'gzip';
|
|
169
|
+
res.writeHead(200, extHeader);
|
|
170
|
+
fileStream.pipe(zlib.createGzip()).pipe(res);
|
|
171
|
+
} else {
|
|
172
|
+
res.writeHead(200, extHeader);
|
|
173
|
+
fileStream.pipe(res);
|
|
174
|
+
}
|
|
175
|
+
return;
|
|
99
176
|
|
|
100
|
-
|
|
177
|
+
} else {
|
|
101
178
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
179
|
+
// Return 404
|
|
180
|
+
obj.onNotFound(response);
|
|
106
181
|
}
|
|
107
182
|
});
|
|
108
183
|
}
|
|
109
|
-
|
|
110
|
-
// No route catched, maybe it's a static content
|
|
111
|
-
// or not handled? Well, at this point we call 404
|
|
112
|
-
if (handled == false && isMatch == false ) {
|
|
113
|
-
|
|
114
|
-
var path = require('path'),
|
|
115
|
-
ext = path.extname(req.url).replace('.', ''),
|
|
116
|
-
extHandled = false,
|
|
117
|
-
extHeader = {};
|
|
118
|
-
var mimes = {
|
|
119
|
-
|
|
120
|
-
'png' : 'image/png',
|
|
121
|
-
'webp': 'image/webp',
|
|
122
|
-
'jpg' : 'image/jpg',
|
|
123
|
-
'css' : 'text/css',
|
|
124
|
-
'gz' : 'application/x-gzip',
|
|
125
|
-
'gif' : 'image/gif',
|
|
126
|
-
'js' : 'text/javascript',
|
|
127
|
-
'svg' : 'image/svg+xml',
|
|
128
|
-
'ttf' : 'application/x-font-ttf',
|
|
129
|
-
'otf' : 'application/x-font-opentype',
|
|
130
|
-
'pdf' : 'application/pdf',
|
|
131
|
-
'json' : 'application/json'
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
var compressionMimes = {
|
|
135
|
-
'css' : 'text/css',
|
|
136
|
-
'js' : 'text/javascript',
|
|
137
|
-
'gz' : 'application/x-gzip'
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
if (mimes[ext] != undefined && mimes[ext] != 'undefined') {
|
|
141
|
-
|
|
142
|
-
extHandled = true;
|
|
143
|
-
extHeader = {'Content-Type': mimes[ext]};
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (extHandled) {
|
|
147
|
-
|
|
148
|
-
var fs = require('fs'),
|
|
149
|
-
rep = __dirname.replace('core/framework', ''),
|
|
150
|
-
route = request.path.replace(obj.server.options.base_url, ''),
|
|
151
|
-
filename = path.join(rep, route),
|
|
152
|
-
filePrivate = obj.isProtectedFile(route);
|
|
153
|
-
|
|
154
|
-
fs.exists(filename, function(exists) {
|
|
155
|
-
|
|
156
|
-
if (exists && !filePrivate) {
|
|
157
|
-
|
|
158
|
-
var acceptEncoding = (req.headers['accept-encoding'] != undefined) ? req.headers['accept-encoding'] : '';
|
|
159
|
-
var fileStream = fs.createReadStream(filename);
|
|
160
|
-
if (acceptEncoding.match(/\bgzip\b/) && compressionMimes[ext] != undefined) {
|
|
161
|
-
extHeader['Content-Encoding'] = 'gzip';
|
|
162
|
-
res.writeHead(200, extHeader);
|
|
163
|
-
fileStream.pipe(zlib.createGzip()).pipe(res);
|
|
164
|
-
} else {
|
|
165
|
-
res.writeHead(200, extHeader);
|
|
166
|
-
fileStream.pipe(res);
|
|
167
|
-
}
|
|
168
|
-
return;
|
|
169
|
-
|
|
170
|
-
} else {
|
|
171
|
-
|
|
172
|
-
// Return 404
|
|
173
|
-
obj.onNotFound(response);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
184
|
}
|
|
179
|
-
}
|
|
180
|
-
|
|
185
|
+
}
|
|
186
|
+
}),
|
|
187
|
+
handled = false;
|
|
181
188
|
isMatch = false;
|
|
182
189
|
};
|
|
183
190
|
|