Controller

此文档表示控制器下接口,在子控制器下可以直接使用。

ip()

获取当前请求的用户ip。

  1. testAction: function(){
  2. //用户ip
  3. var ip = this.ip();
  4. }

如果项目部署在本地的话,返回的ip为127.0.0.1

isGet()

判断当前请求是否是get请求。

  1. testAction: function(){
  2. //如果是get请求直接渲染模版
  3. if(this.isGet()){
  4. return this.display();
  5. }
  6. }

isPost()

判断当前请求是否是post请求。

  1. testAction: function(){
  2. //如果是post请求获取对应的数据
  3. if(this.isPost()){
  4. var data = this.post();
  5. }
  6. }

isMethod(method)

判断是否是一个特定类型的请求。

  1. testAction: function(){
  2. //判断是否是put请求
  3. var isPut = this.isMethod("put");
  4. //判断是否是delete请求
  5. var isDel = this.isMethod("delete");
  6. }

http支持的请求类型为:GET, POST, PUT, DELETE, HEAD, OPTIONS, PATCH

isAjax(method)

判断是否是ajax类型的请求。

  1. testAction: function(){
  2. //只判断是否是ajax请求
  3. var isAjax = this.isAjax();
  4. //判断是否是get类型的ajax请求
  5. var isGetAjax = this.isAjax("get");
  6. //判断是否是post类型的ajax请求
  7. var isPostAjax = this.isAjax("post");
  8. }

isWebSocket()

判断是否是websocket请求。

  1. testAction: function(){
  2. //是否是WebSocket请求
  3. var isWS = this.isWebSocket();
  4. }

get(name)

获取get参数值,默认值为空字符串。

  1. testAction: function(){
  2. //获取name值
  3. var name = this.get("name");
  4. }

如果不传name,则为获取所有的参数值。

  1. testAction: function(){
  2. //获取所有的参数值
  3. //如:{name: "welefen", "email": "welefen@gmail.com"}
  4. var data = this.get();
  5. }

post(name)

获取post过来的值,默认值为空字符串。

  1. testAction: function(){
  2. //获取post值
  3. var name = this.post("name");
  4. }

如果不传name,则为获取所有的post值。

  1. testAction: function(){
  2. //获取所有的post值
  3. //如:{name: "welefen", "email": "welefen@gmail.com"}
  4. var data = this.post();
  5. }

param(name)

获取get或者post参数,优先从post里获取。等同于下面的方式:

  1. testAction: function(){
  2. //这2种方式的结果是一样的
  3. var name = this.param("name");
  4. var name = this.post("name") || this.get("name");
  5. }

file(name)

获取上传的文件。

  1. testAction: function(){
  2. //获取表单名为image上传的文件
  3. var file = this.file("image");
  4. }

如果不传name,那么获取所有上传的文件。

@TODO 列出file数据格式

header(name, value)

获取或者发送header信息。

获取头信息

获取单个头信息

  1. //获取单个头信息
  2. testAction: function(){
  3. var value = this.header("accept");
  4. }

获取所有的头信息

  1. //获取所有的头信息
  2. testAction: function(){
  3. var headers = this.header();
  4. }

设置头信息

设置单个头信息

  1. //设置单个头信息
  2. testAction: function(){
  3. this.header("Content-Type", "text/xml");
  4. }

批量设置头信息

  1. testAction: function(){
  2. this.header({
  3. "Content-Type": "text/html",
  4. "X-Power": "test"
  5. })
  6. }

userAgent()

获取浏览器端传递过来的userAgent。

  1. //获取userAgent
  2. testAction: function(){
  3. var userAgent = this.userAgent();
  4. }

referer()

获取referer。

  1. //获取referrer
  2. testAction: function(){
  3. var referrer = this.referer();
  4. }

cookie(name, value, options)

获取或者设置cookie

获取cookie

获取单个cookie

  1. //获取单个cookie
  2. testAction: function(){
  3. var name = this.cookie("name");
  4. }

获取所有cookie

  1. //获取所有cookie
  2. testAction: function(){
  3. var cookies = this.cookie();
  4. }

设置cookie

设置cookie默认会用如下的配置,可以在App/Conf/config.js里修改。

  1. //设置cookie默认配置
  2. cookie_domain: "", //cookie有效域名
  3. cookie_path: "/", //cookie路径
  4. cookie_timeout: 0, //cookie失效时间,0为浏览器关闭,单位:秒
  1. //设置cookie
  2. testAction: fucntion(){
  3. this.cookie("name", "welefen");
  4. //修改发送cookie的选项
  5. this.cookie("value", "xxx", {
  6. domain: "",
  7. path: "/",
  8. httponly: true, //httponly
  9. secure: true, //https下才发送cookie到服务端
  10. timeout: 1000 //超时时间,单位秒
  11. })
  12. }

session(name, value)

获取或者设置session。

获取session

  1. //获取session
  2. testAction: function(){
  3. //获取session是个异步的过程,返回一个promise
  4. this.session("userInfo").then(function(data){
  5. if(isEmpty(data)){
  6. //无用户数据
  7. }
  8. })
  9. }

设置session

  1. testAction: function(){
  2. //设置session也是异步操作
  3. this.session("userInfo", {name: "welefen"}).then(function(){
  4. })
  5. }

删除session

  1. testAction: function(){
  2. //不传任何参数表示删除session,比如:用户退出的时候执行删除的操作
  3. this.session().then(function(){
  4. })
  5. }

redirect(url, code)

url跳转。

  • code 默认值为302
  • return 返回一个pendding promise,阻止后面代码继续执行
  1. testAction: function(){
  2. var self = this;
  3. return this.session("userInfo").then(function(data){
  4. if(isEmpty(data)){
  5. //如果用户未登录,则跳转到登录页面
  6. return self.rediect("/login");
  7. }
  8. })
  9. }

assign(name, value)

给模版变量赋值,或者读取已经赋值的模版变量。

变量赋值

单个变量赋值

  1. testAction: function(){
  2. //单个变量赋值
  3. this.assign("name", "value");
  4. }

批量赋值

  1. testAction: function(){
  2. this.assign({
  3. name: "welefen",
  4. url: "http://www.thinkjs.org/"
  5. })
  6. }

读取赋值变量

  1. testAction: function(){
  2. //读取已经赋值的变量
  3. var value = this.assign("url");
  4. }

fetch(templateFile)

display(templateFile)

action(action, data)

可以跨分组、跨控制器的action调用。

  • return 返回一个promise
  1. testAction: function(){
  2. //调用相同分组下的控制器为group,操作为detail方法
  3. var promise = this.action("group:detail", [10]);
  4. //调用admin分组下的控制器为group,操作为list方法
  5. var promise = this.action("admin:group:list", [10])
  6. }

jsonp(data)

jsonp数据输出。

会自动发送Content-Type,默认值为application/json,可以在配置json_content_type中修改。

jsonp的callback名称默认从参数名为callback中获取,可以在配置url_callback_name中修改。

callback名称会自动做安全过滤,只保留\w\.字符。

  1. testAction: function(){
  2. this.jsonp({name: "xxx"});
  3. }

假如当前请求为/test?callback=functioname,那么输出为functioname({name: "xxx"})

: 如果没有传递callback参数,那么以json格式输出。

json(data)

json数据输出。

会自动发送Content-Type,默认值为application/json,可以在配置json_content_type中修改。

status(status)

发送状态码,默认为404。

  1. //发送http状态码
  2. testAction: function(){
  3. this.status(403);
  4. }

echo(data, encoding)

输出数据,可以指定编码。

默认自动发送Content-Type,值为text/html。可以在配置tpl_content_type中修改,也可以设置auto_send_content_type = false来关闭发送Content-Type

  • data 如果是数组或者对象,自动调用JSON.stringify。如果不是字符串或者Buffer,那么自动转化为字符串。
  1. testAction: function(){
  2. this.echo({name: "welefen"});
  3. }

end(data, encoding)

结束当前的http请求数据输出。

如果是通过this.echo输出数据,那么在最后必须要调用this.end来结束输出。

  • data 如果data不为空,那么自动调用this.echo来输出数据
  1. testAction: function(){
  2. this.end({name: "welefen"});
  3. }

type(ext)

发送Content-Type

  • ext 如果是文件扩展名,那么自动查找该扩展名对应的Mime-Type
  1. testAction: function(){
  2. this.type("text/html");
  3. this.type("js"); //自动查找js对应的Mime-Type
  4. this.type("css"); //自动查找css对应的Mime-Type
  5. }

download(file, contentType, filename)

下载文件。

  • file 要下载的文件路径
  • contentType 要发送的Content-Type,如果没传,自动从文件扩展名里获取
  • filename 下载的文件名
  • return 返回一个promise
  1. testAction: function(){
  2. var file = "/home/welefen/a.txt";
  3. this.download(file, 'text/html', '1.txt').then(function(){
  4. //下载完成后可以在这里进行一些操作,如:将下载次数+1
  5. });
  6. }

success(data)

输出一个错误号为0的数据。

  • return 返回一个pendding promise,阻止后面继续执行。
  1. testAction: function(){
  2. return this.success({email: "xxx@gmail.com"})
  3. }

浏览器拿到的数据为:

  1. {
  2. errno: 0,
  3. errmsg: "",
  4. data: {
  5. email: "xxx@gmail.com"
  6. }
  7. }

其中errno表示错误号(此时为0),errmsg表示错误信息(此时为空)。data里存放具体数据。

会自动发送Content-Type,默认值为application/json,可以在配置json_content_type中修改。

其中errnoerrmsg可以通过下面的配置修改:

  1. error_no_key: "errno", //错误号的key
  2. error_msg_key: "errmsg", //错误信息的key

error(errno, errmsg, data)

输出一个errno > 0的信息。

  • errno 错误号,默认为1000,可以通过配置error_no_default_value修改
  • errmsg 错误信息,字符串
  • data 额外的数据
  • return 返回一个pedding promise,阻止后续继续执行
  1. //输出一个错误信息
  2. testAction: function(){
  3. return this.error(1001, "参数不合法");
  4. }

浏览器拿到的数据为:

  1. {
  2. errno: 1001,
  3. errmsg: "参数不合法"
  4. }

也可以值输出错误信息,那么错误号为配置error_no_default_value的值。

  1. testAction: function(){
  2. return this.error("参数不合法");
  3. }

浏览器拿到的数据为:

  1. {
  2. errno: 1000,
  3. errmsg: "参数不合法"
  4. }

也可以传个对象进去,如:

  1. testAction: function(){
  2. return this.error({
  3. errno: 10001,
  4. errmsg: "参数不合法"
  5. })
  6. }

filter(value, type)

变量过滤器,具体请见 这里

valid(data, type)

数据校验,具体请见 这里