egg 4.0.0-beta.5 → 4.0.0-beta.6
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/dist/commonjs/app/extend/context.d.ts +151 -2
- package/dist/commonjs/app/extend/context.js +81 -84
- package/dist/commonjs/app/extend/helper.d.ts +37 -0
- package/dist/commonjs/app/extend/helper.js +49 -0
- package/dist/commonjs/app/extend/request.d.ts +128 -0
- package/dist/commonjs/app/extend/request.js +270 -0
- package/dist/commonjs/app/extend/response.d.ts +25 -0
- package/dist/commonjs/app/extend/response.js +37 -0
- package/dist/commonjs/app/middleware/meta.d.ts +2 -3
- package/dist/commonjs/app/middleware/meta.js +1 -1
- package/dist/commonjs/app/middleware/notfound.d.ts +2 -3
- package/dist/commonjs/app/middleware/notfound.js +1 -1
- package/dist/commonjs/app/middleware/site_file.d.ts +2 -2
- package/dist/commonjs/app/middleware/site_file.js +1 -2
- package/dist/commonjs/config/config.default.js +3 -2
- package/dist/commonjs/lib/application.d.ts +5 -12
- package/dist/commonjs/lib/application.js +9 -20
- package/dist/commonjs/lib/core/base_context_class.d.ts +2 -2
- package/dist/commonjs/lib/core/context_httpclient.d.ts +3 -3
- package/dist/commonjs/lib/core/context_httpclient.js +1 -1
- package/dist/commonjs/lib/core/httpclient.d.ts +2 -3
- package/dist/commonjs/lib/core/httpclient.js +3 -6
- package/dist/commonjs/lib/core/messenger/ipc.js +1 -2
- package/dist/commonjs/lib/egg.d.ts +19 -15
- package/dist/commonjs/lib/egg.js +14 -11
- package/dist/commonjs/lib/type.d.ts +4 -7
- package/dist/commonjs/lib/utils.d.ts +2 -0
- package/dist/commonjs/lib/utils.js +21 -0
- package/dist/esm/app/extend/context.d.ts +151 -2
- package/dist/esm/app/extend/context.js +81 -85
- package/dist/esm/app/extend/helper.d.ts +37 -0
- package/dist/esm/app/extend/helper.js +43 -0
- package/dist/esm/app/extend/request.d.ts +128 -0
- package/dist/esm/app/extend/request.js +264 -0
- package/dist/esm/app/extend/response.d.ts +25 -0
- package/dist/esm/app/extend/response.js +34 -0
- package/dist/esm/app/middleware/meta.d.ts +2 -3
- package/dist/esm/app/middleware/meta.js +1 -1
- package/dist/esm/app/middleware/notfound.d.ts +2 -3
- package/dist/esm/app/middleware/notfound.js +1 -1
- package/dist/esm/app/middleware/site_file.d.ts +2 -2
- package/dist/esm/app/middleware/site_file.js +1 -2
- package/dist/esm/config/config.default.js +3 -2
- package/dist/esm/lib/application.d.ts +5 -12
- package/dist/esm/lib/application.js +9 -20
- package/dist/esm/lib/core/base_context_class.d.ts +2 -2
- package/dist/esm/lib/core/context_httpclient.d.ts +3 -3
- package/dist/esm/lib/core/context_httpclient.js +1 -1
- package/dist/esm/lib/core/httpclient.d.ts +2 -3
- package/dist/esm/lib/core/httpclient.js +2 -2
- package/dist/esm/lib/core/messenger/ipc.js +1 -2
- package/dist/esm/lib/egg.d.ts +19 -15
- package/dist/esm/lib/egg.js +12 -12
- package/dist/esm/lib/type.d.ts +4 -7
- package/dist/esm/lib/utils.d.ts +2 -0
- package/dist/esm/lib/utils.js +14 -0
- package/dist/package.json +1 -1
- package/package.json +6 -9
- package/src/app/extend/context.ts +116 -100
- package/src/app/extend/{helper.js → helper.ts} +14 -13
- package/src/app/extend/{request.js → request.ts} +81 -79
- package/src/app/extend/response.ts +36 -0
- package/src/app/middleware/meta.ts +2 -3
- package/src/app/middleware/notfound.ts +2 -3
- package/src/app/middleware/site_file.ts +3 -5
- package/src/config/config.default.ts +2 -1
- package/src/lib/application.ts +14 -21
- package/src/lib/core/base_context_class.ts +2 -2
- package/src/lib/core/context_httpclient.ts +3 -3
- package/src/lib/core/httpclient.ts +4 -5
- package/src/lib/core/messenger/ipc.ts +0 -1
- package/src/lib/egg.ts +45 -24
- package/src/lib/type.ts +3 -13
- package/src/lib/utils.ts +16 -0
- package/src/app/extend/response.js +0 -101
|
@@ -1,24 +1,34 @@
|
|
|
1
|
-
import { performance } from 'node:perf_hooks';
|
|
2
1
|
import delegate from 'delegates';
|
|
3
2
|
import { assign } from 'utility';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const CONTEXT_HTTPCLIENT = Symbol('
|
|
11
|
-
const CONTEXT_ROUTER = Symbol('
|
|
12
|
-
|
|
3
|
+
import { now, diff } from 'performance-ms';
|
|
4
|
+
import { utils, Context as EggCoreContext, } from '@eggjs/core';
|
|
5
|
+
const HELPER = Symbol('ctx helper');
|
|
6
|
+
const LOCALS = Symbol('ctx locals');
|
|
7
|
+
const LOCALS_LIST = Symbol('ctx localsList');
|
|
8
|
+
const COOKIES = Symbol('ctx cookies');
|
|
9
|
+
const CONTEXT_HTTPCLIENT = Symbol('ctx httpclient');
|
|
10
|
+
const CONTEXT_ROUTER = Symbol('ctx router');
|
|
11
|
+
export default class Context extends EggCoreContext {
|
|
12
|
+
/**
|
|
13
|
+
* Request start time
|
|
14
|
+
* @member {Number} Context#starttime
|
|
15
|
+
*/
|
|
16
|
+
starttime;
|
|
17
|
+
/**
|
|
18
|
+
* Request start timer using `performance.now()`
|
|
19
|
+
* @member {Number} Context#performanceStarttime
|
|
20
|
+
*/
|
|
21
|
+
performanceStarttime;
|
|
13
22
|
/**
|
|
14
23
|
* Get the current visitor's cookies.
|
|
15
24
|
*/
|
|
16
25
|
get cookies() {
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
let cookies = this[COOKIES];
|
|
27
|
+
if (!cookies) {
|
|
28
|
+
this[COOKIES] = cookies = new this.app.ContextCookies(this, this.app.keys, this.app.config.cookies);
|
|
19
29
|
}
|
|
20
|
-
return
|
|
21
|
-
}
|
|
30
|
+
return cookies;
|
|
31
|
+
}
|
|
22
32
|
/**
|
|
23
33
|
* Get a wrapper httpclient instance contain ctx in the hold request process
|
|
24
34
|
*
|
|
@@ -29,7 +39,13 @@ const Context = {
|
|
|
29
39
|
this[CONTEXT_HTTPCLIENT] = new this.app.ContextHttpClient(this);
|
|
30
40
|
}
|
|
31
41
|
return this[CONTEXT_HTTPCLIENT];
|
|
32
|
-
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Alias to {@link Context#httpclient}
|
|
45
|
+
*/
|
|
46
|
+
get httpClient() {
|
|
47
|
+
return this.httpclient;
|
|
48
|
+
}
|
|
33
49
|
/**
|
|
34
50
|
* Shortcut for httpclient.curl
|
|
35
51
|
*
|
|
@@ -38,9 +54,9 @@ const Context = {
|
|
|
38
54
|
* @param {Object} [options] - options for request.
|
|
39
55
|
* @return {Object} see {@link ContextHttpClient#curl}
|
|
40
56
|
*/
|
|
41
|
-
curl(url, options) {
|
|
42
|
-
return this.httpclient.curl(url, options);
|
|
43
|
-
}
|
|
57
|
+
async curl(url, options) {
|
|
58
|
+
return await this.httpclient.curl(url, options);
|
|
59
|
+
}
|
|
44
60
|
/**
|
|
45
61
|
* Alias to {@link Application#router}
|
|
46
62
|
*
|
|
@@ -52,18 +68,18 @@ const Context = {
|
|
|
52
68
|
* ```
|
|
53
69
|
*/
|
|
54
70
|
get router() {
|
|
55
|
-
if (
|
|
56
|
-
this[CONTEXT_ROUTER]
|
|
71
|
+
if (this[CONTEXT_ROUTER]) {
|
|
72
|
+
return this[CONTEXT_ROUTER];
|
|
57
73
|
}
|
|
58
|
-
return this
|
|
59
|
-
}
|
|
74
|
+
return this.app.router;
|
|
75
|
+
}
|
|
60
76
|
/**
|
|
61
77
|
* Set router to Context, only use on EggRouter
|
|
62
|
-
* @param {
|
|
78
|
+
* @param {Router} val router instance
|
|
63
79
|
*/
|
|
64
80
|
set router(val) {
|
|
65
81
|
this[CONTEXT_ROUTER] = val;
|
|
66
|
-
}
|
|
82
|
+
}
|
|
67
83
|
/**
|
|
68
84
|
* Get helper instance from {@link Application#Helper}
|
|
69
85
|
*
|
|
@@ -75,37 +91,20 @@ const Context = {
|
|
|
75
91
|
this[HELPER] = new this.app.Helper(this);
|
|
76
92
|
}
|
|
77
93
|
return this[HELPER];
|
|
78
|
-
}
|
|
94
|
+
}
|
|
79
95
|
/**
|
|
80
96
|
* Wrap app.loggers with context information,
|
|
81
97
|
* if a custom logger is defined by naming aLogger, then you can `ctx.getLogger('aLogger')`
|
|
82
98
|
*
|
|
83
99
|
* @param {String} name - logger name
|
|
84
|
-
* @return {Logger} logger
|
|
85
100
|
*/
|
|
86
101
|
getLogger(name) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
let cache = this[CONTEXT_LOGGERS];
|
|
91
|
-
if (!cache) {
|
|
92
|
-
cache = this[CONTEXT_LOGGERS] = {};
|
|
93
|
-
}
|
|
94
|
-
// read from cache
|
|
95
|
-
if (cache[name])
|
|
96
|
-
return cache[name];
|
|
97
|
-
// get no exist logger
|
|
98
|
-
const appLogger = this.app.getLogger(name);
|
|
99
|
-
if (!appLogger)
|
|
100
|
-
return null;
|
|
101
|
-
// write to cache
|
|
102
|
-
cache[name] = new this.app.ContextLogger(this, appLogger);
|
|
103
|
-
return cache[name];
|
|
104
|
-
},
|
|
102
|
+
return this.app.getLogger(name);
|
|
103
|
+
}
|
|
105
104
|
/**
|
|
106
|
-
* Logger for Application
|
|
105
|
+
* Logger for Application
|
|
107
106
|
*
|
|
108
|
-
* @member {
|
|
107
|
+
* @member {Logger} Context#logger
|
|
109
108
|
* @since 1.0.0
|
|
110
109
|
* @example
|
|
111
110
|
* ```js
|
|
@@ -115,17 +114,16 @@ const Context = {
|
|
|
115
114
|
*/
|
|
116
115
|
get logger() {
|
|
117
116
|
return this.getLogger('logger');
|
|
118
|
-
}
|
|
117
|
+
}
|
|
119
118
|
/**
|
|
120
|
-
* Logger for frameworks and plugins
|
|
121
|
-
* wrapping app.coreLogger with context infomation
|
|
119
|
+
* Logger for frameworks and plugins
|
|
122
120
|
*
|
|
123
|
-
* @member {
|
|
121
|
+
* @member {Logger} Context#coreLogger
|
|
124
122
|
* @since 1.0.0
|
|
125
123
|
*/
|
|
126
124
|
get coreLogger() {
|
|
127
125
|
return this.getLogger('coreLogger');
|
|
128
|
-
}
|
|
126
|
+
}
|
|
129
127
|
/**
|
|
130
128
|
* locals is an object for view, you can use `app.locals` and `ctx.locals` to set variables,
|
|
131
129
|
* which will be used as data when view is rendering.
|
|
@@ -157,18 +155,17 @@ const Context = {
|
|
|
157
155
|
if (!this[LOCALS]) {
|
|
158
156
|
this[LOCALS] = assign({}, this.app.locals);
|
|
159
157
|
}
|
|
160
|
-
if (this[LOCALS_LIST] && this[LOCALS_LIST].length) {
|
|
158
|
+
if (Array.isArray(this[LOCALS_LIST]) && this[LOCALS_LIST].length > 0) {
|
|
161
159
|
assign(this[LOCALS], this[LOCALS_LIST]);
|
|
162
160
|
this[LOCALS_LIST] = null;
|
|
163
161
|
}
|
|
164
162
|
return this[LOCALS];
|
|
165
|
-
}
|
|
163
|
+
}
|
|
166
164
|
set locals(val) {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
},
|
|
165
|
+
const localsList = this[LOCALS_LIST] ?? [];
|
|
166
|
+
localsList.push(val);
|
|
167
|
+
this[LOCALS_LIST] = localsList;
|
|
168
|
+
}
|
|
172
169
|
/**
|
|
173
170
|
* alias to {@link Context#locals}, compatible with koa that use this variable
|
|
174
171
|
* @member {Object} state
|
|
@@ -176,10 +173,10 @@ const Context = {
|
|
|
176
173
|
*/
|
|
177
174
|
get state() {
|
|
178
175
|
return this.locals;
|
|
179
|
-
}
|
|
176
|
+
}
|
|
180
177
|
set state(val) {
|
|
181
178
|
this.locals = val;
|
|
182
|
-
}
|
|
179
|
+
}
|
|
183
180
|
/**
|
|
184
181
|
* Run async function in the background
|
|
185
182
|
* @param {Function} scope - the first args is ctx
|
|
@@ -192,37 +189,37 @@ const Context = {
|
|
|
192
189
|
* });
|
|
193
190
|
* ```
|
|
194
191
|
*/
|
|
195
|
-
runInBackground(scope) {
|
|
192
|
+
runInBackground(scope, taskName) {
|
|
196
193
|
// try to use custom function name first
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
194
|
+
if (!taskName) {
|
|
195
|
+
taskName = Reflect.get(scope, '_name') || scope.name || utils.getCalleeFromStack(true);
|
|
196
|
+
}
|
|
197
|
+
// use setImmediate to ensure all sync logic will run async
|
|
198
|
+
setImmediate(() => {
|
|
199
|
+
this._runInBackground(scope, taskName);
|
|
200
|
+
});
|
|
201
|
+
}
|
|
201
202
|
// let plugins or frameworks to reuse _runInBackground in some cases.
|
|
202
203
|
// e.g.: https://github.com/eggjs/egg-mock/pull/78
|
|
203
|
-
_runInBackground(scope, taskName) {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
.then(() => {
|
|
211
|
-
ctx.coreLogger.info('[egg:background] task:%s success (%dms)', taskName, Math.floor((performance.now() - start) * 1000) / 1000);
|
|
212
|
-
})
|
|
213
|
-
.catch(err => {
|
|
204
|
+
async _runInBackground(scope, taskName) {
|
|
205
|
+
const startTime = now();
|
|
206
|
+
try {
|
|
207
|
+
await scope(this);
|
|
208
|
+
this.coreLogger.info('[egg:background] task:%s success (%dms)', taskName, diff(startTime));
|
|
209
|
+
}
|
|
210
|
+
catch (err) {
|
|
214
211
|
// background task process log
|
|
215
|
-
|
|
212
|
+
this.coreLogger.info('[egg:background] task:%s fail (%dms)', taskName, diff(startTime));
|
|
216
213
|
// emit error when promise catch, and set err.runInBackground flag
|
|
217
214
|
err.runInBackground = true;
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
215
|
+
this.app.emit('error', err, this);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
222
219
|
/**
|
|
223
220
|
* Context delegation.
|
|
224
221
|
*/
|
|
225
|
-
delegate(Context, 'request')
|
|
222
|
+
delegate(Context.prototype, 'request')
|
|
226
223
|
/**
|
|
227
224
|
* @member {Boolean} Context#acceptJSON
|
|
228
225
|
* @see Request#acceptJSON
|
|
@@ -247,12 +244,11 @@ delegate(Context, 'request')
|
|
|
247
244
|
* @since 1.0.0
|
|
248
245
|
*/
|
|
249
246
|
.access('ip');
|
|
250
|
-
delegate(Context, 'response')
|
|
247
|
+
delegate(Context.prototype, 'response')
|
|
251
248
|
/**
|
|
252
249
|
* @member {Number} Context#realStatus
|
|
253
250
|
* @see Response#realStatus
|
|
254
251
|
* @since 1.0.0
|
|
255
252
|
*/
|
|
256
253
|
.access('realStatus');
|
|
257
|
-
|
|
258
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDeEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDakQsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDMUMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDakQsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUN4RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztBQUVoRCxNQUFNLE9BQU8sR0FBRztJQUNkOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM1RixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFD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
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvZXh0ZW5kL2NvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sV0FBVyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakMsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsS0FBSyxFQUFFLE9BQU8sSUFBSSxjQUFjLEdBRWpDLE1BQU0sYUFBYSxDQUFDO0FBU3JCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUNwQyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDcEMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDN0MsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ3RDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDcEQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0FBTzVDLE1BQU0sQ0FBQyxPQUFPLE9BQU8sT0FBUSxTQUFRLGNBQWM7SUFLakQ7OztPQUdHO0lBQ0gsU0FBUyxDQUFTO0lBQ2xCOzs7T0FHRztJQUNILG9CQUFvQixDQUFTO0lBRTdCOztPQUVHO0lBQ0gsSUFBSSxPQUFPO1FBQ1QsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJ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
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BaseContextClass } from '../../lib/core/base_context_class.js';
|
|
2
|
+
/**
|
|
3
|
+
* The Helper class which can be used as utility function.
|
|
4
|
+
* We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
|
|
5
|
+
* then you can use all method on `ctx.helper` that is a instance of Helper.
|
|
6
|
+
*/
|
|
7
|
+
export default class Helper extends BaseContextClass {
|
|
8
|
+
/**
|
|
9
|
+
* Generate URL path(without host) for route. Takes the route name and a map of named params.
|
|
10
|
+
* @function Helper#pathFor
|
|
11
|
+
* @param {String} name - Router Name
|
|
12
|
+
* @param {Object} params - Other params
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```js
|
|
16
|
+
* app.get('home', '/index.htm', 'home.index');
|
|
17
|
+
* ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
|
|
18
|
+
* => /index.htm?by=recent&limit=20
|
|
19
|
+
* ```
|
|
20
|
+
* @return {String} url path(without host)
|
|
21
|
+
*/
|
|
22
|
+
pathFor(name: string, params: Record<string, any>): string;
|
|
23
|
+
/**
|
|
24
|
+
* Generate full URL(with host) for route. Takes the route name and a map of named params.
|
|
25
|
+
* @function Helper#urlFor
|
|
26
|
+
* @param {String} name - Router name
|
|
27
|
+
* @param {Object} params - Other params
|
|
28
|
+
* @example
|
|
29
|
+
* ```js
|
|
30
|
+
* app.get('home', '/index.htm', 'home.index');
|
|
31
|
+
* ctx.helper.urlFor('home', { by: 'recent', limit: 20 })
|
|
32
|
+
* => http://127.0.0.1:7001/index.htm?by=recent&limit=20
|
|
33
|
+
* ```
|
|
34
|
+
* @return {String} full url(with host)
|
|
35
|
+
*/
|
|
36
|
+
urlFor(name: string, params: Record<string, any>): string;
|
|
37
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import url from 'node:url';
|
|
2
|
+
import { BaseContextClass } from '../../lib/core/base_context_class.js';
|
|
3
|
+
/**
|
|
4
|
+
* The Helper class which can be used as utility function.
|
|
5
|
+
* We support developers to extend Helper through ${baseDir}/app/extend/helper.js ,
|
|
6
|
+
* then you can use all method on `ctx.helper` that is a instance of Helper.
|
|
7
|
+
*/
|
|
8
|
+
export default class Helper extends BaseContextClass {
|
|
9
|
+
/**
|
|
10
|
+
* Generate URL path(without host) for route. Takes the route name and a map of named params.
|
|
11
|
+
* @function Helper#pathFor
|
|
12
|
+
* @param {String} name - Router Name
|
|
13
|
+
* @param {Object} params - Other params
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```js
|
|
17
|
+
* app.get('home', '/index.htm', 'home.index');
|
|
18
|
+
* ctx.helper.pathFor('home', { by: 'recent', limit: 20 })
|
|
19
|
+
* => /index.htm?by=recent&limit=20
|
|
20
|
+
* ```
|
|
21
|
+
* @return {String} url path(without host)
|
|
22
|
+
*/
|
|
23
|
+
pathFor(name, params) {
|
|
24
|
+
return this.app.router.url(name, params);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Generate full URL(with host) for route. Takes the route name and a map of named params.
|
|
28
|
+
* @function Helper#urlFor
|
|
29
|
+
* @param {String} name - Router name
|
|
30
|
+
* @param {Object} params - Other params
|
|
31
|
+
* @example
|
|
32
|
+
* ```js
|
|
33
|
+
* app.get('home', '/index.htm', 'home.index');
|
|
34
|
+
* ctx.helper.urlFor('home', { by: 'recent', limit: 20 })
|
|
35
|
+
* => http://127.0.0.1:7001/index.htm?by=recent&limit=20
|
|
36
|
+
* ```
|
|
37
|
+
* @return {String} full url(with host)
|
|
38
|
+
*/
|
|
39
|
+
urlFor(name, params) {
|
|
40
|
+
return this.ctx.protocol + '://' + this.ctx.host + url.resolve('/', this.pathFor(name, params));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9leHRlbmQvaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sR0FBRyxNQUFNLFVBQVUsQ0FBQztBQUMzQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUV4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxNQUFPLFNBQVEsZ0JBQWdCO0lBQ2xEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSCxPQUFPLENBQUMsSUFBWSxFQUFFLE1BQTJCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7OztPQVlHO0lBQ0gsTUFBTSxDQUFDLElBQVksRUFBRSxNQUEyQjtRQUM5QyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { Request as EggCoreRequest } from '@eggjs/core';
|
|
2
|
+
import type { Application } from '../../lib/application.js';
|
|
3
|
+
import type { ContextDelegation } from './context.js';
|
|
4
|
+
import Response from './response.js';
|
|
5
|
+
export default class Request extends EggCoreRequest {
|
|
6
|
+
app: Application;
|
|
7
|
+
ctx: ContextDelegation;
|
|
8
|
+
response: Response;
|
|
9
|
+
/**
|
|
10
|
+
* Parse the "Host" header field host
|
|
11
|
+
* and support X-Forwarded-Host when a
|
|
12
|
+
* proxy is enabled.
|
|
13
|
+
* @member {String} Request#host
|
|
14
|
+
* @example
|
|
15
|
+
* ip + port
|
|
16
|
+
* ```js
|
|
17
|
+
* this.request.host
|
|
18
|
+
* => '127.0.0.1:7001'
|
|
19
|
+
* ```
|
|
20
|
+
* or domain
|
|
21
|
+
* ```js
|
|
22
|
+
* this.request.host
|
|
23
|
+
* => 'demo.eggjs.org'
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
get host(): string;
|
|
27
|
+
/**
|
|
28
|
+
* @member {String} Request#protocol
|
|
29
|
+
* @example
|
|
30
|
+
* ```js
|
|
31
|
+
* this.request.protocol
|
|
32
|
+
* => 'https'
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
get protocol(): string;
|
|
36
|
+
/**
|
|
37
|
+
* Get all pass through ip addresses from the request.
|
|
38
|
+
* Enable only on `app.config.proxy = true`
|
|
39
|
+
*
|
|
40
|
+
* @member {Array} Request#ips
|
|
41
|
+
* @example
|
|
42
|
+
* ```js
|
|
43
|
+
* this.request.ips
|
|
44
|
+
* => ['100.23.1.2', '201.10.10.2']
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
get ips(): string[];
|
|
48
|
+
/**
|
|
49
|
+
* Get the request remote IPv4 address
|
|
50
|
+
* @member {String} Request#ip
|
|
51
|
+
* @return {String} IPv4 address
|
|
52
|
+
* @example
|
|
53
|
+
* ```js
|
|
54
|
+
* this.request.ip
|
|
55
|
+
* => '127.0.0.1'
|
|
56
|
+
* => '111.10.2.1'
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
get ip(): string;
|
|
60
|
+
/**
|
|
61
|
+
* Set the request remote IPv4 address
|
|
62
|
+
* @member {String} Request#ip
|
|
63
|
+
* @param {String} ip - IPv4 address
|
|
64
|
+
* @example
|
|
65
|
+
* ```js
|
|
66
|
+
* this.request.ip
|
|
67
|
+
* => '127.0.0.1'
|
|
68
|
+
* => '111.10.2.1'
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
set ip(ip: string);
|
|
72
|
+
/**
|
|
73
|
+
* detect if response should be json
|
|
74
|
+
* 1. url path ends with `.json`
|
|
75
|
+
* 2. response type is set to json
|
|
76
|
+
* 3. detect by request accept header
|
|
77
|
+
*
|
|
78
|
+
* @member {Boolean} Request#acceptJSON
|
|
79
|
+
* @since 1.0.0
|
|
80
|
+
*/
|
|
81
|
+
get acceptJSON(): boolean;
|
|
82
|
+
_customQuery(cacheName: symbol, filter: (value: string | string[]) => string | string[]): Record<string, string | string[]>;
|
|
83
|
+
/**
|
|
84
|
+
* get params pass by querystring, all values are of string type.
|
|
85
|
+
* @member {Object} Request#query
|
|
86
|
+
* @example
|
|
87
|
+
* ```js
|
|
88
|
+
* GET http://127.0.0.1:7001?name=Foo&age=20&age=21
|
|
89
|
+
* this.query
|
|
90
|
+
* => { 'name': 'Foo', 'age': '20' }
|
|
91
|
+
*
|
|
92
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
93
|
+
* this.query
|
|
94
|
+
* =>
|
|
95
|
+
* {
|
|
96
|
+
* "a": "b",
|
|
97
|
+
* "o[foo]": "bar",
|
|
98
|
+
* "b[]": "1",
|
|
99
|
+
* "e": "val"
|
|
100
|
+
* }
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
get query(): Record<string, string>;
|
|
104
|
+
/**
|
|
105
|
+
* get params pass by querystring, all value are Array type. {@link Request#query}
|
|
106
|
+
* @member {Array} Request#queries
|
|
107
|
+
* @example
|
|
108
|
+
* ```js
|
|
109
|
+
* GET http://127.0.0.1:7001?a=b&a=c&o[foo]=bar&b[]=1&b[]=2&e=val
|
|
110
|
+
* this.queries
|
|
111
|
+
* =>
|
|
112
|
+
* {
|
|
113
|
+
* "a": ["b", "c"],
|
|
114
|
+
* "o[foo]": ["bar"],
|
|
115
|
+
* "b[]": ["1", "2"],
|
|
116
|
+
* "e": ["val"]
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
get queries(): Record<string, string[]>;
|
|
121
|
+
/**
|
|
122
|
+
* Set query-string as an object.
|
|
123
|
+
*
|
|
124
|
+
* @function Request#query
|
|
125
|
+
* @param {Object} obj set querystring and query object for request.
|
|
126
|
+
*/
|
|
127
|
+
set query(obj: Record<string, string>);
|
|
128
|
+
}
|