# 升級指南
[TOC=2,3]
2.0 在架構和特性上都完全進行了重寫,是個顛覆式的版本,所以無法直接從?`1.x`?升級到?`2.0`?版本的。
## 與 1.x 版本差異
### 項目結構
2.0 默認使用按模塊進行項目結構劃分的,與 1.x 在目錄結構有一些差別。如果想 2.0 下使用類似 1.x 的項目結構,可以在創建項目的時候指定?`--mode=normal`。如:
~~~
thinkjs new demo --mode=normal
~~~
### 文件大小寫
1.x 里文件名使用駝峰的方式,如:`Controller/indexController.js`。2.0 里嚴格遵循 Node.js 社區的規范,文件路徑使用小寫的方式,并且文件名去除了類型,如:`controller/index.js`。
改變后文件名更加簡潔,且不會出現有的系統下區分大小寫的問題。
### debug 模式
1.x 下開發環境需要開啟?`debug`?模式,線上需要關閉 debug 模式,但經常會出現線上開啟了 debug 模式,導致出現內存泄漏等問題。
2.0 廢棄了?`debug`?模式,而是提供了?`development`,`testing`?和?`production`?3 種模式,分別在對應的環境下使用,創建項目時會創建對應的 3 個文件,這樣在不同的環境下就可以使用不同的文件來啟動項目了。
### C 函數
1.x 里提供了?`C`?函數來讀取配置,2.0 里廢除了該函數,不同地方使用不同的方式來讀取配置。
Controller,Middleware 等含有?`http`?對象的地方使用?`config`?方法來讀取配置,其他等地方需要使用`think.config`?方法來讀取配置。
### D 和 M 函數
1.x 里提供了?`D`?和?`M`?函數來實例化模型,2.0 里廢除了這 2 個函數,不同的地方使用不同的方式來實例化模型。
Controller,Model,Middleware 等地方使用?`model`?方法來實例化模型,其他等地方使用?`think.model`?方法來實例化模型。
### Controller,Model 函數
1.x 里提供了?`Controller`?來創建控制器類,`Model`?來創建模型類,2.0 里廢除了這些函數。并提供了多種方式來創建類。
ES6 直接使用?`class extends think.model.base`?來創建一個模型類,非 ES6 下可以通過?`think.model`?來創建一個模型類,創建控制器類類似。
### 其他全局函數
1.x 里直接提供了一些通用的全局函數,如:`md5`,`mkdir`?等,2.0 中將這些函數都移到了?`think`?對象上,如:`think.md5`,`think.mkdir`。
### 自執行目錄 common/
1.x 下?`common/`?下的文件會啟動被調用,2.0 中將該目錄名為?`bootstrap`,并且要在?`common`?模塊下,如:`src/common/bootstrap`。
#### Behavior 和 Driver
2.0 將 Behavior 改為了 middleware,Driver 改為了 adapter。
### 線上部署
1.x 版本下提供了簡單的腳本?`ctrl.sh`?來管理當前 Node.js 服務,2.0 里廢棄了該文件,建議使用?`pm2`?來管理,并且提供了 pm2 的配置文件?`pm2.json`,線上通過?`pm2 start pm2.json`?即可啟動服務。
- 快速入門
- 介紹
- 創建項目
- 項目結構
- 代碼規范
- 升級指南
- 進階應用
- 模塊
- 控制器
- 視圖
- 配置
- 路由
- 模型
- 介紹
- 事務
- 關聯模型
- 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