controller
think.controller.base
继承自 think.http.base 类。项目里的控制器需要继承该类。
使用 ES6 的语法继承该类
export default class extends think.controller.base {
indexAction(){
}
}
使用普通方式继承该类
module.exports = think.controller({
indexAction(){
}
})
属性
controller.http
传递进来的 http 对象。
方法
controller.ip()
return
{String}
获取当前请求用户的 ip,等同与 http.ip 方法。
export default class extends think.controller.base {
indexAction(){
let ip = this.ip();
}
}
controller.method()
return
{String}
获取当前请求的类型,转化为小写。
export default class extends think.controller.base {
indexAction(){
let method = this.method(); //get or post ...
}
}
controller.isMethod(method)
method
{String} 类型return
{Boolean}
判断当前的请求类型是否是指定的类型。
controller.isGet()
return
{Boolean}
判断是否是 GET 请求。
controller.isPost()
return
{Boolean}
判断是否是 POST 请求。
controller.isAjax(method)
method
{String}return
{Boolean}
判断是否是 Ajax 请求。如果指定了 method,那么请求类型也要相同。
export default class extends think.controller.base {
indexAction(){
//是ajax 且请求类型是 POST
let isAjax = this.isAjax('post');
}
}
controller.isWebSocket()
return
{Boolean}
是否是 websocket 请求。
controller.isCli()
return
{Boolean}
是否是命令行下调用。
controller.isJsonp(callback)
callback
{String} callback 名称return
{Boolean}
是否是 jsonp 请求。
controller.get(name)
name
{String} 参数名
获取 GET 参数值。
export default class extends think.controller.base {
indexAction(){
//获取一个参数值
let value = this.get('xxx');
//获取所有的参数值
let values = this.get();
}
}
controller.post(name)
name
{String} 参数名
获取 POST 提交的参数。
export default class extends think.controller.base {
indexAction(){
//获取一个参数值
let value = this.post('xxx');
//获取所有的 POST 参数值
let values = this.post();
}
}
controller.param(name)
name
{String} 参数名
获取参数值,优先从 POST 里获取,如果取不到再从 GET 里获取。
controller.file(name)
name
{String} 上传文件对应的字段名
获取上传的文件,返回值是个对象,包含下面的属性:
{
fieldName: 'file', //表单字段名称
originalFilename: filename, //原始的文件名
path: filepath, //文件保存的临时路径,使用时需要将其移动到项目里的目录,否则请求结束时会被删除
size: 1000 //文件大小
}
如果文件不存在,那么值为一个空对象 {}
。
controller.header(name, value)
name
{String} header 名value
{String} header 值
获取或者设置 header。
export default class extends think.controller.base {
indexAction(){
let accept = this.header('accept'); //获取 header
this.header('X-NAME', 'thinks'); //设置 header
}
}
controller.expires(time)
time
{Number} 过期时间,单位为秒
强缓存,设置 Cache-Control
和 Expires
头信息。
export default class extends think.controller.base {
indexAction(){
this.expires(86400); //设置过期时间为 1 天。
}
}
controller.userAgent()
获取 userAgent。
controller.referrer(onlyHost)
referrer
{Boolean} 是否只需要 host
获取 referrer。
controller.cookie(name, value, options)
name
{String} cookie 名value
{String} cookie 值options
{Object}
获取、设置或者删除 cookie。
export default class extends think.controller.base {
indexAction(){
//获取 cookie 值
let value = this.cookie('think_name');
}
}
export default class extends think.controller.base {
indexAction(){
//设置 cookie 值
this.cookie('think_name', value, {
timeout: 3600 * 24 * 7 //有效期为一周
});
}
}
export default class extends think.controller.base {
indexAction(){
//删除 cookie
this.cookie('think_name', null);
}
}
controller.session(name, value)
name
{String} session 名value
{Mixed} session 值return
{Promise}
读取、设置和清除 session。
读取 Session
export default class extends think.controller.base {
* indexAction(){
//获取session
let value = yield this.session('userInfo');
}
}
设置 Session
export default class extends think.controller.base {
* indexAction(){
//设置 session
yield this.session('userInfo', data);
}
}
清除 Session
export default class extends think.controller.base {
* indexAction(){
//清除当前用户的 session
yield this.session();
}
}
controller.lang(lang, asViewPath)
lang
{String} 要设置的语言asViewPath
{Boolean} 是否在模版目录添加一层语言目录
读取或者设置语言。
controller.locale(key)
key
{String}
根据 language 获取对应的语言文本。
controller.redirect(url, statusCode)
url
{String} 要跳转的 urlstatusCode
{Number} 状态码,默认为 302
页面跳转。
controller.assign(name, value)
name
{String | Object} 变量名value
{Mixed} 变量值
将变量赋值到模版中。
export default class extends think.controller.base {
indexAction(){
//单个赋值
this.assign('title', 'thinkjs');
//批量赋值
this.assign({
name: 'xxx',
desc: 'yyy'
})
}
}
controller.fetch(templateFile)
templateFile
{String} 模版文件地址return
{Promise}
获取解析后的模版内容。
直接获取
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// home/index_index.html
let content = yield this.fetch();
}
}
改变 action
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// home/index_detail.html
let content = yield this.fetch('detail');
}
}
改变 controller 和 action
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// home/user_detail.html
let content = yield this.fetch('user/detail');
}
}
改变 module, controller 和 action
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// admin/user_detail.html
let content = yield this.fetch('admin/user/detail');
}
}
改变文件后缀名
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// home/index_detail.xml
let content = yield this.fetch('detail.xml');
}
}
获取绝对路径文件
// 假设文件路径为 /foo/bar/app/home/controller/watermark.js
export default class extends think.controller.base {
* indexAction(){
// /home/xxx/aaa/bbb/c.html
let content = yield this.fetch('/home/xxx/aaa/bbb/c.html');
}
}
controller.display(templateFile)
templateFile
{String} 模版文件路径
输出模版内容到浏览器端。查找模版文件策略和 controller.fetch
相同。
controller.jsonp(data)
data
{Mixed} 要输出的内容
jsonp 的方法输出内容,获取 callback 名称安全过滤后输出。
export default class extends think.controller.base {
indexAction(){
this.jsonp({name: 'thinkjs'});
//writes
'callback_fn_name({name: "thinkjs"})'
}
}
controller.json(data)
data
{Mixed} 要输出的内容
json 的方式输出内容。
controller.status(status)
status
{Number} 状态码,默认为 404
设置状态码。
controller.deny(status)
status
{String} 状态码,默认为 403
拒绝当前请求。
controller.write(data, encoding)
data
{mixed} 要输出的内容encoding
{String} 编码
输出内容
controller.end(data, encoding)
data
{mixed} 要输出的内容encoding
{String} 编码
输出内容后结束当前请求。
controller.type(type, charset)
type
{String} Content-Typecharset
{Boolean} 是否自动追加 charset
设置 Content-Type。
controller.download(filePath, contentType, fileName)
filePath
{String} 下载文件的具体路径content-Type
{String} Content-TypefileName
{String} 保存的文件名
下载文件。
export default class extends think.controller.base {
indexAction(){
let filePath = think.RESOUCE_PATH + '/a.txt';
//自动识别 Content-Type,保存的文件名为 a.txt
this.download(filePath);
}
}
export default class extends think.controller.base {
indexAction(){
let filePath = think.RESOUCE_PATH + '/a.log';
//自动识别 Content-Type,保存的文件名为 b.txt
this.download(filePath, 'b.txt');
}
}
export default class extends think.controller.base {
indexAction(){
let filePath = think.RESOUCE_PATH + '/a.log';
//指定 Content-Type 为 text/html,保存的文件名为 b.txt
this.download(filePath, 'text/html', 'b.txt');
}
}
controller.success(data, message)
data
{Mixed} 要输出的数据message
{String} 追加的message
格式化输出一个正常的数据,一般是操作成功后输出。
http.success({name: 'thinkjs'});
//writes
{
errno: 0,
errmsg: '',
data: {
name: 'thinkjs'
}
}
这样客户端就可以根据 errno
是否为 0
为判断当前请求是否正常。
controller.fail(errno, errmsg, data)
errno
{Number} 错误号errmsg
{String} 错误信息data
{Mixed} 额外的数据
格式化输出一个异常的数据,一般是操作失败后输出。
注
:字段名 errno
和 errmsg
可以在配置里进行修改。
http.fail(100, 'fail')
//writes
{
errno: 100,
errmsg: 'fail',
data: ''
}
这样客户端就可以拿到具体的错误号和错误信息,然后根据需要显示了。
注
:字段名 errno
和 errmsg
可以在配置里进行修改。
controller.sendTime(name)
name
{String} header key
发送请求的执行时间,使用 header 的方式发出。
如若转载,请注明出处:sau交流学习社区-power by saucxs(程新松)(/page/295.html)
- 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?马库斯批判Hinton、吴恩达、LeCun等三大神煽风点火!指媒体炒作将再引发AI寒冬,NeurIPS顶会接收,PyTorch官方论文首次曝光完整设计思路,IBM人机辩论第三场:AI利大于弊观点险胜,机器人为自己正名
- 会后空翻的机器人、会开门的机器狗:揭秘波士顿动力Atlas&Spot,Twitter要改版成Reddit风格?官方高仿号Twttr公测已近1年,明年或将正式推出,柯洁夺斗地主全国冠军!"斗地主可以排解输棋痛苦”,「附身」马云、恶搞特朗普,AI新应用助你上演「大咖模仿秀」,
- 任正非、徐直军等6大高管卸任华为子公司职务,任正非称华为交接班已完成多年,美国再收紧对华学术交流,华裔美国人被指控间谍数量增加两倍,起死回生!美国科学家首次让人类进入“假死状态”,换取手术时间,女生数理化不如男?Nature子刊一周连发两篇研究,我被相反的结果整懵了
- 马斯克的电动皮卡卖疯了!发布一天预订近15万辆,网友:火星版什么时候出?全球论文年撤稿1400篇!受学术不端重创的研究机构引入“预审查”,92年的小哥,985的特聘教授:3年博士期间发表40篇SCI,微软小冰是怎样学会对话、唱歌和比喻?三位首席科学家讲背后的原理
- 2019年度“高被引科学家”名单:计算机领域中国内地43人入围排第一,首个波士顿动力机器狗买家秀来了:化身监工,确认路线后就能自动巡航,AI不是万灵神药!看看普林斯顿大学的这份“假AI防骗报告”, 谷歌大脑开源「数据增强」新招数:ImageNet准确率达85%,大神Quoc Le出
- 超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?马库斯批判Hinton、吴恩达、LeCun等三大神煽风点火!指媒体炒作将再引发AI寒冬,NeurIPS顶会接收,PyTorch官方论文首次曝光完整设计思路,IBM人机辩论第三场:AI利大于弊观点险胜,机器人为自己正名
- 会后空翻的机器人、会开门的机器狗:揭秘波士顿动力Atlas&Spot,Twitter要改版成Reddit风格?官方高仿号Twttr公测已近1年,明年或将正式推出,柯洁夺斗地主全国冠军!"斗地主可以排解输棋痛苦”,「附身」马云、恶搞特朗普,AI新应用助你上演「大咖模仿秀」,
- 任正非、徐直军等6大高管卸任华为子公司职务,任正非称华为交接班已完成多年,美国再收紧对华学术交流,华裔美国人被指控间谍数量增加两倍,起死回生!美国科学家首次让人类进入“假死状态”,换取手术时间,女生数理化不如男?Nature子刊一周连发两篇研究,我被相反的结果整懵了
- 马斯克的电动皮卡卖疯了!发布一天预订近15万辆,网友:火星版什么时候出?全球论文年撤稿1400篇!受学术不端重创的研究机构引入“预审查”,92年的小哥,985的特聘教授:3年博士期间发表40篇SCI,微软小冰是怎样学会对话、唱歌和比喻?三位首席科学家讲背后的原理
- 2019年度“高被引科学家”名单:计算机领域中国内地43人入围排第一,首个波士顿动力机器狗买家秀来了:化身监工,确认路线后就能自动巡航,AI不是万灵神药!看看普林斯顿大学的这份“假AI防骗报告”, 谷歌大脑开源「数据增强」新招数:ImageNet准确率达85%,大神Quoc Le出
标签云
图文推荐
超越Linux!华为鸿蒙明年将成“第五大操作系统”,网友:何时超过iOS?马库斯批判Hinton、吴恩达、LeCun等三大神煽风点火!指媒体炒作将再引发AI寒冬,NeurIPS顶会接收,PyTorch官方论文首次曝光完整设计思路,IBM人机辩论第三场:AI利大于弊观点险胜,机器人为自己正名
saucxs 2019-12-03 10:02:36
会后空翻的机器人、会开门的机器狗:揭秘波士顿动力Atlas&Spot,Twitter要改版成Reddit风格?官方高仿号Twttr公测已近1年,明年或将正式推出,柯洁夺斗地主全国冠军!"斗地主可以排解输棋痛苦”,「附身」马云、恶搞特朗普,AI新应用助你上演「大咖模仿秀」,
saucxs 2019-12-02 09:47:08
任正非、徐直军等6大高管卸任华为子公司职务,任正非称华为交接班已完成多年,美国再收紧对华学术交流,华裔美国人被指控间谍数量增加两倍,起死回生!美国科学家首次让人类进入“假死状态”,换取手术时间,女生数理化不如男?Nature子刊一周连发两篇研究,我被相反的结果整懵了
saucxs 2019-11-26 09:52:16
马斯克的电动皮卡卖疯了!发布一天预订近15万辆,网友:火星版什么时候出?全球论文年撤稿1400篇!受学术不端重创的研究机构引入“预审查”,92年的小哥,985的特聘教授:3年博士期间发表40篇SCI,微软小冰是怎样学会对话、唱歌和比喻?三位首席科学家讲背后的原理
saucxs 2019-11-25 09:42:09
2019年度“高被引科学家”名单:计算机领域中国内地43人入围排第一,首个波士顿动力机器狗买家秀来了:化身监工,确认路线后就能自动巡航,AI不是万灵神药!看看普林斯顿大学的这份“假AI防骗报告”, 谷歌大脑开源「数据增强」新招数:ImageNet准确率达85%,大神Quoc Le出
saucxs 2019-11-21 09:47:58
- 东方财富
- saucxs博客园
- weekly周报
- loveBook
- 前端博客
- 技术交流学习社区
- saucxs
- segmentfault
- saucxs的博客
- haorooms
- luckyscript
- 东方财富期货
- 峰云就她了
- binlive
- songEagle
- 且听风吟
- (TX)Heying Ye
- CG Online Judge
- Chris's Blog
- vueRouter
- 龙恩0707
- 鑫空间,鑫生活
- 木易杨
- MDN-js
- Cherry's Blog
- InterviewMap
- 安安哥的小戏台
- xiaojun1994-cat
- JavaScript-Garden
- junruchen-daily
- 秋天爱美丽
- web-summary-daily
- w3cplus-tb
- 潜行者m
- 于江水
- KieSun-git
- cnodejs
- aerminBlog
- fex_bd
- gwuhaolin-git
- Deboy's Blog
- react-china
- react.docschina
- Vuejs社区
- vuejsDoc
- cdnSocketIo
- shuaihuaCC
- colorize
- stazhu
- 前端学习
- IBM Dev社区
- linux运维笔记
- webpackDoc
- sayskyGithub
- 前端里
- 996.ICU
- electronjs
- CS-Notes
- mqyqingfengBlog
- beego官方
- 编码规范
- 阮一峰个人网站
- sessionstack
- damonareGoUp
- 咀嚼之味
- fe-interview
- xd-tayde/blog
- css-tricks
- ghmagical个人中心
- markyunp6
- hellogithub
- rin部落
- 建站素材
- 前端资源网
- CSS开发手册
- web技术交流
- 程新松个人网站
- wangEditor
- 小松博客
- 交流学习社区