zoukankan      html  css  js  c++  java
  • 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教程)
  • 相关阅读:
    CopyOnWriteArrayList 读写分离,弱一致性
    Java中定时器Timer致命缺点(附学习方法)
    排队打饭:公平锁和非公平锁(面试)
    母鸡下蛋实例:多线程通信生产者和消费者wait/notify和condition/await/signal条件队列
    volatile,synchronized可见性,有序性,原子性代码证明(基础硬核)
    Synchronized用法原理和锁优化升级过程(面试)
    Java中多线程安全问题实例分析
    iOS 相互引用引起内存泄露问题说明
    iOS app 集成友盟推送问题
    ios即时通讯客户端开发之-mac上基于XMPP的聊天客户端开发环境搭建
  • 原文地址:https://www.cnblogs.com/xiaoheimiaoer/p/4020650.html
Copyright © 2011-2022 走看看