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