# 項目結構
通過 thinkjs 命令創建完項目后,項目目錄結構類似如下:
~~~
|-- nginx.conf
|-- package.json
|-- src
| |-- common
| | |-- bootstrap
| | | |-- generate_icon.js
| | | `-- middleware.js
| | |-- config
| | | |-- config.js
| | | |-- env
| | | | |-- development.js
| | | | `-- production.js
| | | |-- hook.js
| | | |-- locale
| | | | |-- en.js
| | | | `-- zh-CN.js
| | | `-- route.js
| | |-- controller
| | | `-- error.js
| | `-- runtime
| `-- home
| |-- config
| |-- controller
| | |-- base.js
| | `-- index.js
| |-- logic
| | `-- doc.js
| `-- model
|-- view
| `-- zh-CN
| |-- common
| | |-- error_400.html
| | |-- error_403.html
| | |-- error_404.html
| | |-- error_500.html
| | `-- error_503.html
| `-- home
| |-- doc_index.html
| |-- doc_search.html
| |-- inc
| | |-- footer.html
| | `-- header.html
| |-- index_changelog.html
| |-- index_demo.html
| `-- index_index.html
`-- www
|-- favicon.ico
|-- index.js
|-- production.js
`-- static
|-- css
|-- img
`-- js
~~~
> 注:?指定不同的模式創建的項目目錄機構可能有細微的差別,但總體是類似的。
### nginx.conf
nginx 的配置文件,建議線上使用 nginx 做反向代理。
### src
源代碼目錄,使用?`--es6`?參數創建項目才有該目錄。需要通過?`npm run watch-compile`?命令編譯該目錄下的文件到?`app/`?目錄。
如果沒有使用 ES6 特性創建項目,則直接有?`app/`?目錄。
### src/common
通用模塊目錄,項目目錄都是按模塊來劃分的,`common`?模塊下存放一些通用的處理邏輯。
### src/common/bootstrap
項目啟動目錄,該目錄下的文件會自動加載,無需手動?`require`?。
可以在這個目錄下文件里定義一些全局函數、注冊中間件等常用的功能。
##### 定義全局函數
~~~
// src/common/bootstrap/fn.js
global.formatDate = obj => {
...
}
~~~
這里定義了一個全局函數?`formatData`,那么項目里任何地方都可以直接使用該函數。
##### 注冊中間件
~~~
// src/common/bootstrap/middleware.js
think.middleware("replace_image", http => {
...
});
~~~
這里定義了一個中間件?`replace_image`,那么就可以在配置文件?`hook.js`?里將該中間件注冊進去了。
`注:`bootstrap 只能放在 common 模塊里。
### src/common/config
配置文件,這里放一些通用的配置。
其中:路由配置、Hook配置、本地化配置等必須放在這里。
~~~
"use strict";
/**
* config
*/
export default {
//key: value
};
~~~
### src/common/controller
控制器,放一些通用的控制器。其中?`error.js`?里錯誤處理的不同行為,項目里可以根據需要進行修改。
### src/common/runtime
項目運行時生成的一些目錄,如:緩存文件目錄,用戶上傳的文件臨時存放的目錄。
### src/home
`home`?模塊,項目默認模塊。可以在?`src/common/config/config.js`?中修改配置?`default_module`?來重新定義默認模塊。
### src/home/logic
邏輯處理。每個操作執行前可以先進行邏輯校驗,可以包含:參數是否合法、提交的數據是否正常、當前用戶是否已經登錄、當前用戶是否有權限等。這樣可以降低?`controller`?里的?`action`?的復雜度。
~~~
"use strict";
/**
* logic
* @param {} []
* @return {} []
*/
export default class extends think.logic.base {
/**
* index action logic
* @return {} []
*/
indexAction(){
}
}
~~~
### src/home/controller
控制器。一個?`url`?對應一個?`controller`?下的?`action`。
~~~
"use strict";
import Base from "./base.js";
export default class extends Base {
/**
* index action
* @return {Promise} []
*/
indexAction(){
//auto render template file index_index.html
return this.display();
}
}
~~~
### src/home/model
模型。數據庫相關操作。
### view
視圖目錄,存放對應的模版文件。如果支持國際化和多主題,那么視圖目錄下需要有對應的子目錄。
### www
項目的可訪問根目錄,nginx 里的根目錄會配置到此目錄下。
### www/index.js
開發模式下項目的入口文件,可以根據項目需要進行修改。`www/production.js`?為線上的入口文件。
入口文件的代碼類似如下,可以根據項目需要進行修改。
~~~
var thinkjs = require("thinkjs");
var path = require("path");
var rootPath = path.dirname(__dirname);
var instance = new thinkjs({
APP_PATH: rootPath + "/app",
ROOT_PATH: rootPath,
RESOURCE_PATH: __dirname,
env: "development"
});
instance.run();
~~~
### www/static
存放一些靜態資源文件。
- 快速入門
- 介紹
- 創建項目
- 項目結構
- 代碼規范
- 升級指南
- 進階應用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務
- 關聯模型
- Mysql
- MongoDB
- SQLite
- Adapter
- 介紹
- Cache
- Session
- WebSocket
- Template
- 擴展功能
- thinkjs 命令
- 靜態資源訪問
- Middleware
- Service
- Cookie
- 錯誤處理
- 錯誤信息
- 數據校驗
- 國際化
- 路徑常量
- REST API
- 定時任務
- 線上部署
- 推薦模塊
- API
- think
- think.base
- think.http.base
- http
- controller
- rest controller
- model
- model.mongo
- middleware