1. 框架約定目錄規則
1.5 config/config..js: 用於編寫配置檔案;
1.6 config/plugin.js 用於配置需要載入的外掛程式;
2.內建物件
2. request & response:可以在 context 的例項上獲取到當前請求的 request(ctx.request) 和 response(ctx.response) 例項;
ctx - 當前請求的 context 例項。
service - 應用所有的 service。
4. service:推薦所有的service都繼承該基類。
service基類屬性和 controller 基類屬性一致。
3.路由router
路由是描述請求url和具體承擔執行動作的controller的對應。說的直白點,就是使用者訪問不同的路徑時應該有不同的controller去響應不同的內容。
4.控制器controller
1. 控制器的定義以及和路由的關聯
同時,我們也可以自定義基類給控制器繼承,官方案例如下:
const= require('egg');classbasecontrollerextendscontroller
success(data) ;
}notfound(msg)
}module.exports = basecontroller;
定義控制器繼承他:
constcontroller = require('../core/base_controller');classpostcontrollerextendscontroller
}5.獲取提交的資料
接收get請求的資料:ctx.request.query 和 ctx.query.id;
接收post請求的資料:ctx.request.body,而不是ctx.body;post請求時,會有安全驗證問題,簡單的處理方式是關閉安全驗證:
// config/config.default.js
// 配置安全驗證
config.security = ,};接收路由引數:
6.獲取上傳的檔案
記住了,你要先在 config 檔案中啟用 file 模式:
// config/config.default.js
exports.multipart = ;
class uploadcontroller extends controller = this;
const dest = '/public/upload/';
const file = ctx.request.files[0];
console.log(ctx.request.files);
let to = path.dirname(__dirname) + dest + path.basename(file.filepath);
// 處理檔案,比如上傳到雲端 或 放到指定的目錄
await fs.copyfilesync(file.filepath, to);
fs.unlinksync(file.filepath);
console.log(dest);
// 返回路徑
通過 ctx.cookies可以在 controller 中便捷、安全的設定和讀取 cookie。
classcookiecontrollerextendscontrollerasyncremove()
}需要注意的是,cookie預設不支援中文,可以嘗試轉碼,如encodeuri('中文egg'),然後再轉回來decodeuri(ctx.cookies.get('username'));也可以通過加密的方式處理。
清除cookie把值設定為null即可。
maxage: 設定cookie的有效期,單位毫秒,預設瀏覽器關閉消失;
httponly:設定cookie是否允許js訪問,預設true,不允許;
overwrite:如果設定為true,相同的鍵值對會被覆蓋,否則傳送兩個;
signed:如果為true表示對cookie進行簽名,不是加密,只是防止被篡改,注意在獲取的時候也要提供該設定進行匹配;
encrypt:是否加密,true加密後客戶端看不到明文,只能在伺服器端獲取,注意在獲取的時候也要提供該設定進行匹配;
8.session
session 的使用方法非常直觀,直接讀取或者修改就可以,如果要刪除它,直接將它賦值為 null:
classsessioncontrollerextendscontroller
};注意:設定 session 屬性時不要以 _ 開頭,不能為 isnew
session預設配置如下:
exports.session = ;
也可以針對性設定有效期:
// 如果使用者勾選了 `記住我`,設定 30 天的過期時間if (rememberme) ctx.session.maxage = ms('30d');
重置session的有效期:當使用者 session 的有效期僅剩下最大有效期一半的時候
// config/config.default.jsmodule.exports = ,};
9.呼叫service在 controller 中可以呼叫任何乙個 service 上的任何方法,同時 service 是懶載入的,只有當訪問到它的時候框架才會去例項化它。
// 呼叫 service 進行業務處理const res = await ctx.service.post.create(req);
10.傳送http響應i. 設定status
// 設定狀態碼為 201this.ctx.status = 201;
ii. 設定body
ctx.body 是 ctx.response.body 的簡寫,不要和 ctx.request.body 混淆了;
// 響應內容this.ctx.body = '
';
iii. jsonp
在 controller 中,只需要正常編寫即可。使用者請求對應的 url 訪問到這個 controller 的時候,如果 query 中有 _callback=fn 引數,將會返回 jsonp 格式的資料,否則返回json格式的資料。
可配置:
// config/config.default.j***ports.jsonp = ;
iv. 重定向
ø ctx.redirect(url) 如果不在配置的白名單網域名稱內,則禁止跳轉。
ø ctx.unsaferedirect(url) 不判斷網域名稱,直接跳轉,一般不建議使用,明確了解可能帶來的風險後使用。
使用者如果使用ctx.redirect方法,需要在應用的配置檔案中做如下配置:
// config/config.default.j***ports.security = ;
若使用者沒有配置 domainwhitelist 或者 domainwhitelist陣列內為空,則缺省會對所有跳轉請求放行,即等同於ctx.unsaferedirect(url)
防止使用者直接複製url直接訪問伺服器導致越權問題
此方法僅供參考,不知道能不能防住黑客。string constring 獲取父url 如果不是直接輸入的話就是先前的訪問過來的頁面,要是使用者輸入了,這個父url是不存在的 constring req.getheader referer 當前請求url,去掉幾個可以直接訪問的頁面 string se...
直接呼叫FTP伺服器中Office文件
www.2ppt.cn word excel powerpoint等office元件均提供了直接呼叫ftp伺服器中文件的功能,它可以像處理本地文件一樣方便地對ftp中支援的文件進行開啟 編輯和儲存等操作。實現的方法是 在 開啟 對話方塊中將 查詢範圍 選擇為 ftp位置 然後雙擊 新增 更改ftp位...
通過直接路由實現虛擬伺服器(VS DR)
由 wensong 在 週日,2006 02 26 18 03 提交 跟vs tun方法相同,vs dr利用大多數internet服務的非對稱特點,負載排程器中只負責排程請求,而伺服器直接將響應返回給客戶,可以極大地提高整個集群系統的吞吐量。該方法與ibm的netdispatcher產品中使用的方法...