| 
									
										
										
										
											2024-10-17 13:39:35 +08:00
										 |  |  | import s from "apigo.cc/gojs/service" | 
					
						
							|  |  |  | import http from "apigo.cc/gojs/http" | 
					
						
							|  |  |  | import u from "apigo.cc/gojs/util" | 
					
						
							|  |  |  | import co from "apigo.cc/gojs/console" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | let h2c = http | 
					
						
							|  |  |  | let urlPrefix | 
					
						
							|  |  |  | function main() { | 
					
						
							|  |  |  |     s.config({ | 
					
						
							| 
									
										
										
										
											2024-10-18 17:54:37 +08:00
										 |  |  |         app: 'user', | 
					
						
							|  |  |  |         accessTokens: { | 
					
						
							|  |  |  |             'testToken1122': 2 | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         calls: { | 
					
						
							|  |  |  |             'user': 'testToken1122' | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-10-17 13:39:35 +08:00
										 |  |  |         cpuMonitor: true, | 
					
						
							|  |  |  |         memoryMonitor: true, | 
					
						
							|  |  |  |         sessionKey: 'SessionID', | 
					
						
							|  |  |  |         userIdKey: 'id', | 
					
						
							|  |  |  |         limitedMessage: { code: 429, message: "访问过于频繁" }, | 
					
						
							|  |  |  |         authFieldMessage: { code: 403, message: "身份验证失败 [{{USER_AUTHLEVEL}}/{{TARGET_AUTHLEVEL}}]" }, | 
					
						
							|  |  |  |         verifyFieldMessage: { code: 400, message: "参数 [{{FAILED_FIELDS}} 验证失败" }, | 
					
						
							|  |  |  |         limiters: { | 
					
						
							|  |  |  |             ip1s: { | 
					
						
							|  |  |  |                 from: 'ip', | 
					
						
							|  |  |  |                 time: 100, | 
					
						
							|  |  |  |                 times: 10 | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         }, | 
					
						
							| 
									
										
										
										
											2024-10-18 17:54:37 +08:00
										 |  |  |         static: { | 
					
						
							|  |  |  |             '/': 'api/', | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |         rewrite: { | 
					
						
							|  |  |  |             '/echo2.js': '/echo.js' | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2024-10-17 13:39:35 +08:00
										 |  |  |     }) | 
					
						
							|  |  |  |     s.register({ path: '/echo', noLog200: true }, ({ args, response }) => { | 
					
						
							|  |  |  |         // setTimeout(() => {
 | 
					
						
							|  |  |  |         //     response.end(args.name)
 | 
					
						
							|  |  |  |         // }, 1)
 | 
					
						
							|  |  |  |         u.sleep(1) | 
					
						
							|  |  |  |         return args.name | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     s.load('api/echo.js', { min: 20, max: 1000, idle: 100 }) | 
					
						
							|  |  |  |     s.load('api/user.js') | 
					
						
							|  |  |  |     let host = s.start() | 
					
						
							|  |  |  |     h2c = http.newH2C({ | 
					
						
							|  |  |  |         baseURL: 'http://' + host | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  |     return host | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function test(name) { | 
					
						
							|  |  |  |     let r = h2c.get('/echo?name=' + name) | 
					
						
							|  |  |  |     return r.string() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-18 17:54:37 +08:00
										 |  |  | function testStatic() { | 
					
						
							|  |  |  |     let r = h2c.get('/echo2.js') | 
					
						
							|  |  |  |     if (r.string().indexOf('/echo2') === -1) return r.string() | 
					
						
							|  |  |  |     return true | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-10-17 13:39:35 +08:00
										 |  |  | function test2(name) { | 
					
						
							|  |  |  |     let r = h2c.get('/echo2?name=' + name) | 
					
						
							|  |  |  |     return r.string() | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function testUser() { | 
					
						
							|  |  |  |     let r = h2c.get('/userInfo') | 
					
						
							|  |  |  |     if (r.statusCode !== 403 || r.object().code !== 403) return r | 
					
						
							|  |  |  |     r = h2c.post('/login', { id: 'a1', name: 'Tom' }) | 
					
						
							|  |  |  |     if (r.statusCode !== 400 || r.object().code !== 400) return r | 
					
						
							|  |  |  |     r = h2c.post('/login', { id: 123, name: 'Tom\t' }) | 
					
						
							|  |  |  |     if (r.statusCode !== 400 || r.object().code !== 400) return r | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     r = h2c.post('/login', { id: 123, name: 'Tom' }).object() | 
					
						
							|  |  |  |     if (r.code === 1) { | 
					
						
							|  |  |  |         // 测试限流器允许的 10 次请求
 | 
					
						
							|  |  |  |         for (let i = 0; i < 10; i++) { | 
					
						
							|  |  |  |             r = h2c.get('/userInfo').object() | 
					
						
							|  |  |  |             if (r.data.id !== 123 | r.data.name !== 'Tom') { | 
					
						
							|  |  |  |                 return r.data | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         // 测试限流器拒绝的 1 次请求
 | 
					
						
							|  |  |  |         r = h2c.get('/userInfo') | 
					
						
							|  |  |  |         if (r.statusCode != 429) { | 
					
						
							|  |  |  |             return r | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         u.sleep(100) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // 测试限流器过期后允许的 1 次请求
 | 
					
						
							|  |  |  |         r = h2c.get('/userInfo').object() | 
					
						
							|  |  |  |         if (r.data.id !== 123 | r.data.name !== 'Tom') { | 
					
						
							|  |  |  |             return r.data | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return true | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return r | 
					
						
							|  |  |  | } |