thinkjs初试
背景
- 支持http、命令行、Websocket、Restful等多种访问方式
- C(Core)+B(Behavior)+D(Driver)架构
- 高度封装的Model,无需手工写sql语句
- 封装了Db、Session、Cache等功能
- 开发模式下,修改立即生效
npm install -g thinkjs-cmd //可以全局使用thinkjs命令
thinkjs -v //测试是否正确安装
mkdir takeit //创建项目目录
cd takeit //进入项目目录
thinkjs . //初始化项目


- 端口配置,使用不长被占用的端口;安装过程中,存在端口被占用无法正常启动服务的情况;(App/Conf/config.js)
- 数据库配置,配置数据库主机、用户名、密码、数据库以及前缀(App/Conf/config.js)
- 路由配置,由于所创建的项目要求随机生成单一页面,所以需要对路由进行配置(App/Conf/route.js)
- 全局变量配置(www/index.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: '', // 数据库表前缀
};
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"]
]
//定义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多为异步接口,在使用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初试的更多相关文章
- thinkjs与Fine Uploader的邂逅
最近在做一个内部系统,需要一个无刷新的上传功能,找了许久,发现了一个好用的上传工具-Fine Uploader,网上也有不少关于它的介绍,对我有不少的启发,结合我的使用场景简单的介绍一下它与t ...
- caffe初试(一)happynear的caffe-windows版本的配置及遇到的问题
之前已经配置过一次caffe环境了: Caffe初试(一)win7_64bit+VS2013+Opencv2.4.10+CUDA6.5配置Caffe环境 但其中也提到,编译时,用到了cuda6.5,但 ...
- thinkjs——session
工作中又遇到了session问题,于是整理一下有关thinkjs中的session使用小方法: 需要用户登录的网站基本上都离不开 Session,ThinkJS 里默认支持多种类型的 Session, ...
- thinkjs中自定义sql语句
一直以为在使用thinkjs时,只能是它自带的sql语句查询,当遇到类似于这样的sql语句时,却不知道这该怎样来写程序,殊不知原来thinkjs可以执行自定义sql语句 SELECT * from a ...
- 初试Nodejs——使用keystonejs创建博客网站2(修改模板)
上一篇(初试Nodejs——使用keystonejs创建博客网站1(安装keystonejs))讲了keystonejs的安装.安装完成后,已经具备了基本的功能,我们需要对页面进行初步修改,比如,增加 ...
- 项目中初试PHP单元测试
只能叫初试,前面虽然做了一些PHPUnit与团队所用框架的整合,但在整个团队还没有人可以主动推动这个事情,而作为Leader最重要的一种能力应该是"让正确的事情发生",所以今天开始 ...
- VPS -Digital Ocean -初试以及VPN的搭建
首先恭喜你找到这篇博客,它会带你走出困境. 题外话(请忽略):一直以来想搞一个VPS,终于在自己的刺激下试了一下Digital Ocean,还没有使用很长时间不做太多评论,唯一给我的感觉是各种操作还算 ...
- 初试微信小程序
2016年11月3日,微信小程序终于公测了,大家可以正式开发了.早在这之前,应公司要求,和同事就早早的试了一下微信小程序的开发,特此记录一下: 微信官方小程序文档:https://mp.weixin. ...
- ThinkJS 项目用 WebStorm 来设置断点与调试
1. 前置条件.已按ThinkJS 2.0 文档 之 <创建项目> 建好项目. 说明a: 本示例创建项目名为wagang,使用es6配置: thinkjs new wagang --es6 ...
随机推荐
- amcharts报表制作
fusioncharts官网:http://www.fusioncharts.com/demos/gallery/#column-and-bar 最近使用amcharts fb4,flashBuild ...
- WPF - ViewModle中关闭Window
在Binding close event时候,需要从ViewModel关闭Window. 一个很简洁的解决方案就是,将Window 当做CommandParameter传过去. Command=&qu ...
- C# - List操作 - 按照字母排序
有Family的类如下: public class FamilyModel { public string Name { set; get; } } 创建List List<FamilyMode ...
- PyQt实现图片中心旋转
# -*- coding: cp936 -*- from PyQt4 import QtCore, QtGui, Qt class RotatePage(QtGui.QFrame): def __in ...
- delphi 简单的删除字符串尾部数字的代码
delphi 简单的删除字符串尾部数字的代码 方式一: function FilterShowName(const sName: String): String; var I: Integer; b ...
- [AngularJS + RxJS] Search with RxJS
When doing search function, you always need to consider about the concurrent requests. AEvent ----(6 ...
- 图像重采样(CPU和GPU)
1 前言 之前在写影像融合算法的时候,免不了要实现将多光谱影像重采样到全色大小.当时为了不影响融合算法整体开发进度,其中重采样功能用的是GDAL开源库中的Warp接口实现的. 后来发现GDAL War ...
- Java 编程下使用 Class.forName() 加载类
在一些应用中,无法事先知道使用者将加载什么类,而必须让使用者指定类名称以加载类,可以使用 Class 的静态 forName() 方法实现动态加载类.下面的范例让你可以指定类名称来获得类的相关信息. ...
- Hacker(21)----密码攻防之加密与解密基础
密码对于用户而言并不陌生,它是一种用于保护重要信息和文件的工具,只有输入正确的密码才可查看文件和信息的具体内容.黑客为了获取这些信息,会采用各种方式来破解密码,因此用户不仅需要了解黑客破解密码的常用方 ...
- image即时上传
function preview_upload(input, img_div_id){ var img_id = img_div_id.replace("itempic_previewDiv ...