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
1
2
|
npm install -g thinkjs-cmd //可以全局使用thinkjs命令 thinkjs -v //测试是否正确安装 |
创建项目
1
2
3
|
mkdir takeit //创建项目目录 cd takeit //进入项目目录 thinkjs . //初始化项目 |
如果初始化成功,浏览器会打开http://127.0.0.1:8360/,页面显示hello,thinkjs。同时takeit目录一下会生成这么一个目录结构:
![](http://images0.cnblogs.com/blog/435330/201410/121557025933070.jpg)
关于每个目录的作用,上面 都进行了说明,这里我就不做说明了。
环境配置
关于配置thinkjs本身有很多可以自己按需求进行配置,文档中也进行了详细的说明,这里我主要对我所实现的项目需要的配置进行说明。
- 端口配置,使用不长被占用的端口;安装过程中,存在端口被占用无法正常启动服务的情况;(App/Conf/config.js)
- 数据库配置,配置数据库主机、用户名、密码、数据库以及前缀(App/Conf/config.js)
- 路由配置,由于所创建的项目要求随机生成单一页面,所以需要对路由进行配置(App/Conf/route.js)
- 全局变量配置(www/index.js)
App/Conf/config.js
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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
1
2
3
4
5
6
7
8
9
10
11
|
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
1
2
3
4
5
6
7
8
|
//定义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教程)
随笔分类 - nodejs
摘要: 背景 什么是thinkjs?thinkjs是奇舞团开源的一款NodejsMVC框架,该框架底层基于Promise来实现,很好的解决了Nodejs里异步回调的问题。我为什么会使用thinkjs?一方面它具有以下特性:支持http、命令行、Websocket、Restful等多种访问方式C(Core...阅读全文
摘要: 对于前端开发来说,web应用我们并不陌生。今天想要讨论一下,在开发一个web应用的时候,我们需要一些基本的知识储备。我们知道,一个web应用脱离不了(request)请求和响应(response),我们所有想要的的东西,想做的事情都脱离不了它们。那么我们具体需要关注那些知识点呢?在nodejs中...阅读全文
摘要: 了解一下OSI七层模型OSI层功能TCP/IP协议应用层文件传输,电子邮件,文件服务,虚拟终端TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet表示层数据格式化,代码转换,数据加密-会话层数据格式化,代码转换,数据加密-传输层提供端对端的接口TCP,UDP网络层为数据包选择路由IP...阅读全文
摘要: 由于要做一个关于node的分享,要准备写一个ppt方便就行交流。之前用的比较多的是slides(http://www.slides.com),最近知道了一个node写的工具,可以生成ppt,号称很强大,我就做了一次尝试(原因是使用markdown语法写ppt)。 nodeppt是@三水清大大的...阅读全文
摘要: 简单了解了node的安装和一些基本的常识之后,今天学习了node中很重要的包和模块的一些知识点。 首先学习一下包的规范,它由包结构和包描述两部分组成。包结构用于组织包的各种文件,包描述用于描述包的信息,供外部读取分析。 完全符合CommonJS规范的包目录包含一下结构: packa...阅读全文
摘要: 由于项目需要,最近开始学习nodejs。在学习过程中,记录一些必要的操作和应该注意的点。 首先是如何安装nodejs环境?(我用的是windows 7环境,所以主要是windows 7的例子。如果想看linux下的安装可以参考http://www.cnblogs.com/meteoric_cr...阅读全文
搜索
我的标签
随笔档案
最新评论
- 1. Re:记浏览器帐号登录插件开发遇到的问题
- @吕大豹
感谢大豹的指导~ - 2. Re:记浏览器帐号登录插件开发遇到的问题
- 顶一个~
- 3. Re:你被adblock坑过吗?
- @黑MAO
我觉得相反,提醒某些网站特意触发不让你用去广告。。 - 4. Re:你被adblock坑过吗?
- @eflay这个方法不错,我这里想表达的主要是在开发过程中,尽量不要出现触发easylist中的规则~...
- 5. Re:你被adblock坑过吗?
- chrome下找不到东西的时候就会切换到IE内核不带去广告的看下。