thinkjs初試


背景

    
    什么是thinkjs?thinkjs是奇舞團開源的一款NodejsMVC框架,該框架底層基於Promise來實現,很好的解決了Nodejs里異步回調的問題。我為什么會使用thinkjs?一方面它具有以下特性:
  • 支持http、命令行、Websocket、Restful等多種訪問方式
  • C(Core)+B(Behavior)+D(Driver)架構
  • 高度封裝的Model,無需手工寫sql語句
  • 封裝了Db、Session、Cache等功能
  • 開發模式下,修改立即生效
    擁有了這些特性在開發和需求完善上有很大幫助;另一方面我是初學Nodejs,對各個知識點進行了單一的學習,並沒有制作過完整的應用,並深知學習和實踐上有很大的區別,加上thinkjs的主創@welefen( http://www.welefen.com/)對Nodejs的異步IO、事件驅動與thinkjs相結合的進行了分享,就想着使用thinkjs制作一個網站,深入理解Nodejs的原理以及實現,更能吸取一下thinkjs的精華。於是,有了下面的一些想法。
 
需求簡介
 
    制作一個具有存儲和下載文件、文本的網站,沒有帳號,只要輸入域名即可分配有一個存儲空間,這個存儲空間一周有效,或者進行加鎖,加鎖后只能查看和下載,不能進行修改操作。
 
安裝thinkjs
 
    
npm install -g thinkjs-cmd //可以全局使用thinkjs命令
thinkjs -v //測試是否正確安裝

  

    
創建項目
    
    
mkdir takeit //創建項目目錄
cd takeit //進入項目目錄
thinkjs . //初始化項目

  

    如果初始化成功,瀏覽器會打開 http://127.0.0.1:8360/,頁面顯示hello,thinkjs。同時takeit目錄一下會生成這么一個目錄結構:
  
    關於每個目錄的作用,上面 都進行了說明,這里我就不做說明了。
 
環境配置
 
    關於配置thinkjs本身有很多可以自己按需求進行配置,文檔中也進行了詳細的說明,這里我主要對我所實現的項目需要的配置進行說明。
  1. 端口配置,使用不長被占用的端口;安裝過程中,存在端口被占用無法正常啟動服務的情況;(App/Conf/config.js)
  2. 數據庫配置,配置數據庫主機、用戶名、密碼、數據庫以及前綴(App/Conf/config.js)
  3. 路由配置,由於所創建的項目要求隨機生成單一頁面,所以需要對路由進行配置(App/Conf/route.js)
  4. 全局變量配置(www/index.js)
    App/Conf/config.js
    
module.exports = {
        //配置項: 配置值
        port: 1314, //監聽的端口
        app_group_list: ['Home', 'Admin'], //分組列表
 
        db_type: 'mysql', // 數據庫類型
        db_host: 'localhost', // 服務器地址
        db_port: '3306', // 端口
        db_name: 'takeit', // 數據庫名
        db_user: 'root', // 用戶名
        db_pwd: '123456', // 密碼
        db_prefix: '', // 數據庫表前綴
};

  

    App/Conf/route.js
 
module.exports = [
        [/^\/?(index\/download\/)fileid\/(.*)/, ":1?fileid=:2"],
        [/^\/?(index\/download\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/downloadtext\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/uploadtext\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/uploadfiles\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/delfiles\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/lock\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(index\/unlock\/)pageid\/(.*)/, ":1?pageid=:2"],
        [/^\/?(.*)$/, "index/index/?pageId=:1"]
]

  

    www/index.js
//定義APP的根目錄
global.APP_PATH = __dirname + '/../App';
//靜態資源根目錄
global.RESOURCE_PATH = __dirname;
global.ROOT_PATH = __dirname;
global.FILES_DIR = __dirname + '/files/';
global.APP_DEBUG = true;
require('thinkjs');
 
功能實現
 
    因為網站主要實現的功能各不相同,就不做詳細的說明了,主要說一下,在使用thinkjs實現一些功能的時候需要注意的地方。
  • 由於thinkjs多為異步接口,在使用this.display();的時候需要注意
  • this.end()返回的數據為字符串,在返回json數據時,可以使用較為方便的this.sucess()或this.fail(),也可以直接使用this.json();返回想要返回的數據
  • 可以使用this.get()或者this.post()或者this.file()接收傳遞的數據,也可以使用this.download()下載文件等等Controller相關函數(http://thinkjs.org/api/controller.html),也可以使用md5()等全局方法,當然也可以自己在App/Common/common.js進行自定義全局函數(http://thinkjs.org/api/global.html
  • 操作數據庫時,可以使用D函數實例化操作數據,具體的操作方法可以參照文檔關於數據操作API(http://thinkjs.org/api/model.html
 
總結
 
    這是站在一個初學者的角度整理了一個在初次使用thinkjs完成一個項目中遇到的問題和需要注意的點兒,難免存在各種問題,僅作記錄和交流。另說一些廢話:學習的過程的孤獨的,也是難以堅持的,多“捯飭捯飭”自己就能明白不少,一味看書不實踐其實學的不會那么透徹。
 
參考資料:
 
推薦:https://blog.alphatr.com/create-thinkjs-in-bae.html (百度雲平台搭建thinkjs教程)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM