<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ThinkJS 是一款使用 ES6/7 特性全新開發的 Node.js MVC 框架,使用 ES7 中`async/await`,或者 ES6 中的`*/yield`?特性徹底解決了 Node.js 中異步嵌套的問題。同時吸收了國內外眾多框架的設計理念和思想,讓開發 Node.js 項目更加簡單、高效。 使用 ES6/7 特性來開發項目可以大大提高開發效率,是趨勢所在。并且新版的 Node.js 對 ES6 特性也有了較好的支持,即使有些特性還沒有支持,也可以借助?[Babel](http://babeljs.io/)?編譯來支持。 [TOC] ## 特性 ### 使用 ES6/7 特性來開發項目 借助 Babel 編譯,可以在項目中大膽使用 ES6/7 所有的特性,無需擔心哪些特性當前版本不支持。尤其是使用?`async/await`?或者?`*/yield`?來解決異步回調的問題。 ~~~ //user controller, home/controller/user.js export default class extends think.controller.base { //login action async loginAction(self){ //如果是get請求,直接顯示登錄頁面 if(this.isGet()){ return this.display(); } //這里可以通過post方法獲取所有的數據,數據已經在logic里做了校驗 let data = this.post(); let md5 = think.md5("think_" + data.pwd); //用戶名和加密后的密碼去匹配數據庫中對于的條目 let result = await this.model("user").where({name: data.name, pwd: md5}).find(); //如果未匹配到任何數據,表示用戶名或者密碼錯誤 if(think.isEmpty(result)){ return this.fail("login fail"); } //獲取到用戶信息后,將用戶信息寫入session await this.session("userInfo", result); return this.success(); } } ~~~ 上面的代碼我們使用了 ES6 里的?`class`,?`export`,?`let`?以及 ES7 里的?`async`?和?`await`?等特性,雖然查詢數據庫和寫入?`Session`?都是異步操作,但借助?`async/await`,代碼都是同步書寫的。最后使用?`Babel`?進行編譯,就可以穩定運行在 Node.js 的環境中了。 ### 支持多種項目結構和多種項目環境 項目支持單模塊模式、普通模式、分模塊模式等多種項目結構,可以滿足各種項目復雜度的開發。 默認支持?`development`,`testing`?和?`prodution`?3 種項目環境,可以在不同的項目環境下進行不同的配置,滿足在不同環境下的配置需求,同時還可以基于項目需要進行擴展。 ### 支持豐富的數據庫 ThinkJS 支持?`mysql`,?`mongodb`,?`sqlite`?等常見的數據庫,并且封裝了很多操作數據庫的接口,無需手動拼接 SQL 語句,還可以自動防止 SQL 注入等安全漏洞。同時支持事務、關聯模型等高級功能。 ### 代碼自動更新 ThinkJS 內置了一套代碼自動更新的機制,文件修改后立即生效,不用重啟 Node.js 服務,也不用借助第三方模塊。 ### 自動創建 REST 接口 使用?`thinkjs`?命令可以自動創建 REST 接口,不用寫任何的代碼即可完成 REST API 的開發。如果想在 REST 接口中過濾字段或者進行權限校驗,也很方便處理。 ### 支持多種 WebSocket 庫 ThinkJS 支持?`socket.io`,`sockjs`?等常見的 WebSocket 庫,并且對這些庫進行包裝,抹平各個庫之間接口調用上的差異,給開發者一致的體驗。 ### 豐富的測試用例 ThinkJS 含有 1500+ 的測試用例,代碼覆蓋率達到 95% ,每一次修改都有對應的測試用例來保障框架功能的穩定。 ### 支持命令行調用執行定時任務 ThinkJS 里的?`Action`除了可以響應用戶的請求,同時支持在命令行下訪問,借助這套機制就可以很方便的執行定時任務。 ### Hook 和 Middleware ThinkJS 使用 Hook 和 Middleware 機制,可以靈活的對訪問請求進行攔截處理。 ### 詳細的日志 ThinkJS 內置了詳細的日志功能,可以很方便的查看各種日志,方便追查問題。 #### HTTP 請求日志 ~~~ [2015-10-12 14:10:03] [HTTP] GET /favicon.ico 200 5ms [2015-10-12 14:10:11] [HTTP] GET /zh-CN/doc.html 200 11ms [2015-10-12 14:10:11] [HTTP] GET /static/css/reset.css 200 3ms ~~~ #### Socket 連接日志 ~~~ [2015-10-12 14:13:54] [SOCKET] Connect mysql with mysql://root:root@127.0.0.1:3306 ~~~ #### 錯誤日志 ~~~ [2015-10-12 14:15:32] [Error] Error: ER_ACCESS_DENIED_ERROR: Access denied for user "root3"@"localhost" (using password: YES) [2015-10-12 14:16:12] [Error] Error: Address already in use, port:8360. http://www.thinkjs.org/doc/error.html#EADDRINUSE ~~~ ### 豐富的路由機制 ThinkJS 支持正則路由、規則路由、靜態路由等多種路由機制,并且可以基于模塊來設置。可以讓 URL 更加簡潔的同時又不丟失性能。 ### 支持國際化和多主題 ThinkJS 使用很簡單的方法就可以支持國際化和多主題等功能。 ## 與其他框架的對比 ### 與 express/koa 對比 express/koa 是 2 個比較簡單的框架,框架本身提供的功能比較簡單,項目中需要借助大量的第三方插件才能完成項目的開發,所以靈活度比較高。但使用很多第三方組件一方便提高了項目的復雜度,另一個方便第三方插件質量參差不齊,也會帶來內存泄漏等風險。 koa 使用 ES6 里的?`*/yield`?解決了異步回調的問題,但?`*/yield`?只會是個過渡解決方案,會被 ES7 里的`async/await`?所替代。 而 ThinkJS 提供了整套解決方案,每個功能都經過了嚴格的性能和內存泄漏等方面的測試,并且在項目中可以直接使用 ES6/7 所有的特性。 ### 與 sails 對比 sails 也是一個提供整套解決方案的 Node.js 框架,對數據庫、REST API、安全方面也很多封裝,使用起來比較方便。 但 sails 對異步回調的問題還沒有優化,還是使用 callback 的方式,給開發帶來很大的不便,導致項目中無法較好的使用 ES6/7 特性。 ### ThinkJS 的不足 上面說了很多 ThinkJS 的優點,當然 ThinkJS 也有很多的不足。如: * 框架還比較新,缺少社區等方面的支持 * 還沒有經過超大型項目的檢驗 ## ES6/7 參考文檔 關于 ES6/7 特性可以參考下面的文檔: * [learn-es2015](http://babeljs.io/docs/learn-es2015/) * [ECMAScript 6 入門](http://es6.ruanyifeng.com/) * [ECMAScript 6 Features](https://github.com/lukehoban/es6features) * [ECMAScript 6 compatibility table](http://kangax.github.io/compat-table/es6/) * [ECMAScript 7 Features](https://github.com/hemanth/es7-features) * [ECMAScript 7 compatibility table](http://kangax.github.io/compat-table/es7/)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看