think.controller.base
繼承自 think.http.base 類。項(xiàng)目里的控制器需要繼承該類。
export default class extends think.controller.base {
indexAction(){
}
}
module.exports = think.controller({
indexAction(){
}
})
傳遞進(jìn)來的 http 對(duì)象。
return
{String}獲取當(dāng)前請(qǐng)求用戶的 ip,等同與 http.ip 方法。
export default class extends think.controller.base {
indexAction(){
let ip = this.ip();
}
}
return
{String}獲取當(dāng)前請(qǐng)求的類型,轉(zhuǎn)化為小寫。
export default class extends think.controller.base {
indexAction(){
let method = this.method(); //get or post ...
}
}
method
{String} 類型return
{Boolean}判斷當(dāng)前的請(qǐng)求類型是否是指定的類型。
return
{Boolean}判斷是否是 GET 請(qǐng)求。
return
{Boolean}判斷是否是 POST 請(qǐng)求。
method
{String}return
{Boolean}判斷是否是 Ajax 請(qǐng)求。如果指定了 method,那么請(qǐng)求類型也要相同。
export default class extends think.controller.base {
indexAction(){
//是ajax 且請(qǐng)求類型是 POST
let isAjax = this.isAjax("post");
}
}
return
{Boolean}是否是 websocket 請(qǐng)求。
return
{Boolean}是否是命令行下調(diào)用。
callback
{String} callback 名稱return
{Boolean}是否是 jsonp 請(qǐng)求。
name
{String} 參數(shù)名獲取 GET 參數(shù)值。
export default class extends think.controller.base {
indexAction(){
//獲取一個(gè)參數(shù)值
let value = this.get("xxx");
//獲取所有的參數(shù)值
let values = this.get();
}
}
name
{String} 參數(shù)名獲取 POST 提交的參數(shù)。
export default class extends think.controller.base {
indexAction(){
//獲取一個(gè)參數(shù)值
let value = this.post("xxx");
//獲取所有的 POST 參數(shù)值
let values = this.post();
}
}
name
{String} 參數(shù)名獲取參數(shù)值,優(yōu)先從 POST 里獲取,如果取不到再?gòu)?GET 里獲取。
name
{String} 上傳文件對(duì)應(yīng)的字段名獲取上傳的文件,返回值是個(gè)對(duì)象,包含下面的屬性:
{
fieldName: "file", //表單字段名稱
originalFilename: filename, //原始的文件名
path: filepath, //文件保存的臨時(shí)路徑,使用時(shí)需要將其移動(dòng)到項(xiàng)目里的目錄,否則請(qǐng)求結(jié)束時(shí)會(huì)被刪除
size: 1000 //文件大小
}
如果文件不存在,那么值為一個(gè)空對(duì)象 {}
。
name
{String} header 名value
{String} header 值獲取或者設(shè)置 header。
export default class extends think.controller.base {
indexAction(){
let accept = this.header("accept"); //獲取 header
this.header("X-NAME", "thinks"); //設(shè)置 header
}
}
time
{Number} 過期時(shí)間,單位為秒強(qiáng)緩存,設(shè)置 Cache-Control
和 Expires
頭信息。
export default class extends think.controller.base {
indexAction(){
this.expires(86400); //設(shè)置過期時(shí)間為 1 天。
}
}
獲取 userAgent。
referrer
{Boolean} 是否只需要 host獲取 referrer。
name
{String} cookie 名value
{String} cookie 值options
{Object}獲取或者設(shè)置 cookie。
export default class extends think.controller.base {
indexAction(){
//獲取 cookie 值
let value = this.cookie("think_name");
}
}
export default class extends think.controller.base {
indexAction(){
//設(shè)置 cookie 值
this.cookie("think_name", value, {
timeout: 3600 * 24 * 7 //有效期為一周
});
}
}
name
{String} session 名value
{Mixed} session 值return
{Promise}讀取、設(shè)置和清除 session。
export default class extends think.controller.base {
* indexAction(){
//獲取session
let value = yield this.session("userInfo");
}
}
export default class extends think.controller.base {
* indexAction(){
//設(shè)置 session
yield this.session("userInfo", data);
}
}
export default class extends think.controller.base {
* indexAction(){
//清除當(dāng)前用戶的 session
yield this.session();
}
}
lang
{String} 要設(shè)置的語(yǔ)言asViewPath
{Boolean} 是否在模版目錄添加一層語(yǔ)言目錄讀取或者設(shè)置語(yǔ)言。
key
{String}根據(jù) language 獲取對(duì)應(yīng)的語(yǔ)言文本。
url
{String} 要跳轉(zhuǎn)的 urlstatusCode
{Number} 狀態(tài)碼,默認(rèn)為 302頁(yè)面跳轉(zhuǎn)。
name
{String | Object} 變量名value
{Mixed} 變量值將變量賦值到模版中。
export default class extends think.controller.base {
indexAction(){
//單個(gè)賦值
this.assign("title", "thinkjs");
//批量賦值
this.assign({
name: "xxx",
desc: "yyy"
})
}
}
templateFile
{String} 模版文件地址return
{Promise}獲取解析后的模版內(nèi)容。
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
* indexAction(){
// home/index_index.html
let content = yield this.fetch();
}
}
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
* indexAction(){
// home/index_detail.html
let content = yield this.fetch("detail");
}
}
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
* indexAction(){
// home/user_detail.html
let content = yield this.fetch("user/detail");
}
}
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
* indexAction(){
// admin/user_detail.html
let content = yield this.fetch("admin/user/detail");
}
}
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.js
export default class extends think.controller.base {
* indexAction(){
// home/index_detail.xml
let content = yield this.fetch("detail.xml");
}
}
// 假設(shè)文件路徑為 /foo/bar/app/home/controller/index.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");
}
}
templateFile
{String} 模版文件路徑輸出模版內(nèi)容到瀏覽器端。查找模版文件策略和controller.fetch
相同。
data
{Mixed} 要輸出的內(nèi)容jsonp 的方法輸出內(nèi)容,獲取 callback 名稱安全過濾后輸出。
export default class extends think.controller.base {
indexAction(){
this.jsonp({name: "thinkjs"});
//writes
"callback_fn_name({name: "thinkjs"})"
}
}
data
{Mixed} 要輸出的內(nèi)容json 的方式輸出內(nèi)容。
status
{Number} 狀態(tài)碼,默認(rèn)為 404設(shè)置狀態(tài)碼。
status
{String} 狀態(tài)碼,默認(rèn)為 403拒絕當(dāng)前請(qǐng)求。
data
{mixed} 要輸出的內(nèi)容encoding
{String} 編碼輸出內(nèi)容
data
{mixed} 要輸出的內(nèi)容encoding
{String} 編碼輸出內(nèi)容后結(jié)束當(dāng)前請(qǐng)求。
type
{String} Content-Typecharset
{Boolean} 是否自動(dòng)追加 charset設(shè)置 Content-Type。
filePath
{String} 下載文件的具體路徑content-Type
{String} Content-TypefileName
{String} 報(bào)錯(cuò)的文件名下載文件。
export default class extends think.controller.base {
indexAction(){
let filePath = think.RESOUCE_PATH + "/a.txt";
//自動(dòng)識(shí)別 Content-Type,保存的文件名為 a.txt
this.download(filePath);
}
}
export default class extends think.controller.base {
indexAction(){
let filePath = think.RESOUCE_PATH + "/a.log";
//自動(dòng)識(shí)別 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");
}
}
data
{Mixed} 要輸出的數(shù)據(jù)message
{String} 追加的message格式化輸出一個(gè)正常的數(shù)據(jù),一般是操作成功后輸出。
http.success({name: "thinkjs"});
//writes
{
errno: 0,
errmsg: "",
data: {
name: "thinkjs"
}
}
這樣客戶端就可以根據(jù)errno
是否為0
為判斷當(dāng)前請(qǐng)求是否正常。
errno
{Number} 錯(cuò)誤號(hào)errmsg
{String} 錯(cuò)誤信息data
{Mixed} 額外的數(shù)據(jù)格式化輸出一個(gè)異常的數(shù)據(jù),一般是操作失敗后輸出。
注
:字段名errno
和errmsg
可以在配置里進(jìn)行修改。
http.fail(100, "fail")
//writes
{
errno: 100,
errmsg: "fail",
data: ""
}
這樣客戶端就可以拿到具體的錯(cuò)誤號(hào)和錯(cuò)誤信息,然后根據(jù)需要顯示了。
注
:字段名errno
和errmsg
可以在配置里進(jìn)行修改。
name
{String} header key發(fā)送請(qǐng)求的執(zhí)行時(shí)間,使用 header 的方式發(fā)出。
文檔地址:https://github.com/75team/www.thinkjs.org/tree/master/view/zh-CN/doc/2.0/api_controller.md
更多建議: