在上一篇透過 cli 指令,已經快速建好了網站的基本雛形,現在讓我們來看看裡面有什麼東西。
$ tree -d -L 1
.
├── api
├── assets
├── config
├── tasks
└── views
API 的全名是 Application Programming Interface,顧名思義就是放我們應用程式主要邏輯的地方。
$ tree api -d -L 1
api
├── controllers
├── models
├── policies
├── responses
└── services
若你寫過 JAVA 想必你非常熟悉這兩個資料夾,因為參與開發 Sails 的主要開發者中,曾在 stackoverflow 上說過 Sails 主要是參照 Rails 架構,但 Rails 中一些令人詬病的設計,則是參照 JAVA 架構來改善,若你是 JAVA 的開發者,當你在使用 Sails 時,總是有一種親切感。
例如事前檢查某個值應該為數字或者不該為 null,當發生非預期的情況時丟出 Error。
走哪個 view 或 response http code,並處理最外層的 Error。
create : async(req,res) => {
try{
// 略...
if(product){
return res.view("success_view");
}else{
return res.view("failure_view");
}
} catch(e){
return res.serverError(e);
}
}
例如:寄信、訂單計算、與第三方平台溝通...
getServiceFee : async(user, order) => {
let isVip = UserService.isVip(user);
if(order.paymentTotalAmount > largeOrderAmount || isVip ){
return 0; // 免運
}else{
return 70;
}
}
getNewUser : async(...略...) => {
let newUser = {
username: newUser.username,
email: newUser.email,
// (略...)
password: newUser.password
}
return newUser;
}
這個框架並沒有定義 Dao 的架構,所以平常 Dao 要做的事,你可以把它放在 Service 裡做,或著你也可以另外擴充 Dao 的架構的話。