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教程)
  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/xiaoheimiaoer/p/4020650.html
Copyright © 2011-2022 走看看