当前位置: 首页 > 工具软件 > JSController > 使用案例 >

Egg.js 控制器Controller 获取HTTP请求参数方式

邓星光
2023-12-01

版权声明:本文为博主原创文章,转载请注明转载地址。

获取 HTTP 请求参数
1.query: 在url中 ? 后面的部分是一个 Query String,这一部分经常用于GET类型的请求中传递参数
	key重复时,只取第一次出现的值
	const query = this.ctx.query;
2.queries: 同上
	key重复时,放在一个数组里
3.Router params: 获取路由申明的参数
	const params = this.ctx.params;
4.body: 请求体,规避url传递参数诸多限制(长度和安全){
	不适于于GET、HEAD(因为HTTP协议中并不建议在通过 GET、HEAD 方法访问时传递 body)
	框架内置 bodyParser 中间件解析请求body成object,并挂载到ctx.request.body上
	
	错误码400: 解析失败
	错误码413: 超过配置的解析最大长度
	
	配置解析长度
	module.exports = {bodyParser: {jsonLimit: '1mb', formLimit: '1mb'}};
	
	获取上传的文件:  常用上传格式:Multipart/form-data
	框架通过内置 Multipart 插件获取用户上传的文件{
		1.File 模式: 
			1)启动file模式: 
				exports.multipart = {mode: 'file'};
			2)上传/接收文件
			// app/controller/upload.js
		2.Stream 模式
			// app/controller/stream.js
			单文件: ctx.getFileStream()
			多文件: ctx.multipart(),然后遍历
		
		配置项(注意: 当重写了 whitelist 时, fileExtensions 不生效,实际中只配置一项就行)
		module.exports = {
		  multipart: {
			fileExtensions: [ '.apk' ], // 增加对 apk 扩展名的文件支持
			whitelist: [ '.png' ], // 覆盖整个白名单,只允许上传 '.png' 格式
		  },
		};
	}
}
5.header: 请求头{
	获取方式: 
	1) ctx.headers, ctx.header, ctx.request.headers, ctx.request.header
	2) ctx.get(name), ctx.request.get(name)   --推荐这种方式
		ctx.host
		ctx.protocol
		ctx.ips
		ctx.ip
}
6.Cookie: 通过 ctx.cookies,我们可以在 Controller 中便捷、安全的设置和读取 Cookie
7.Session: 框架内置了 Session 插件,给我们提供了 ctx.session 来访问或者修改当前用户 Session 
	配置项
	module.exports = {
	  key: 'EGG_SESS', // 承载 Session 的 Cookie 键值对名字
	  maxAge: 86400000, // Session 的最大有效时间
	};
 类似资料: