版权声明:本文为博主原创文章,转载请注明转载地址。
获取 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 的最大有效时间
};