# 安装 ThinkJS 命令
~~~
$ npm install -g think-cli
~~~
安装完成后,系统中会有`thinkjs`命令(可以通过`thinkjs -V`查看 think-cli 的版本号)。
# 卸载旧版本命令
~~~
$ npm uninstall -g thinkjs
~~~
# 创建项目
执行`thinkjs new [project_name]`来创建项目,如:
~~~
$ thinkjs new quickstart
$ cd quickstart
$ npm install
$ npm start
~~~
> 现在的Node的版本>8,创建过程中在询问时,不启用Babel转义,开启转义很难调试
执行完成后,控制台下会看到类似下面的日志:
~~~
[2019-04-25 15:21:35.408] [INFO] - Server running at http://127.0.0.1:8360
[2019-04-25 15:21:35.412] [INFO] - ThinkJS version: 3.2.10
[2019-04-25 15:21:35.413] [INFO] - Enviroment: development
[2019-04-25 15:21:35.413] [INFO] - Workers: 8
~~~
打开浏览器访问`http://127.0.0.1:8360/`,如果是在远程机器上创建的项目,需要把 IP 换成对应的地址。
# 数据访问的例子
## 修改配置文件
修改`/src/config/adapter.js`,设置数据库连接
```js
/**
* model adapter config
* @type {Object}
*/
exports.model = {
type: 'mysql',
common: {
logConnect: isDev,
logSql: isDev,
logger: msg => think.logger.info(msg)
},
mysql: {
handle: mysql,
database: 'quickstart',
prefix: 'think_',
encoding: 'utf8',
host: '127.0.0.1',
port: '3306',
user: 'quickstart',
password: 'quickstart',
dateStrings: true
}
};
```
## 创建数据库
使用工具创建数据库quickstart,增加一个用户quickstart,设置密码为quickstart,创建一张表think_school
```sql
use quickstart;
DROP TABLE IF EXISTS `think_school`;
CREATE TABLE `think_school`
(
`id` int(11) AUTO_INCREMENT PRIMARY KEY NOT NULL,
`school_code` varchar(10) NOT NULL COMMENT '学校代码',
`title` varchar(50) NOT NULL COMMENT '公司名称',
`cover_image_id` int(11) DEFAULT 0 COMMENT '学校的LOGO',
`city` varchar(50) DEFAULT NULL COMMENT '所在城市',
`type` varchar(50) DEFAULT NULL COMMENT '学校类型',
`tags` varchar(500) DEFAULT NULL COMMENT 'tags',
`address` varchar(500) DEFAULT NULL COMMENT '学校地址',
`description` TEXT DEFAULT NULL COMMENT 'description'
) ENGINE = MyISAM
DEFAULT CHARSET = utf8 COMMENT ='高校基础信息';
```
## 修改控制器
增加一个addAction
```js
//增加数据,使用POST请求
//http://127.0.0.1:8360/index/add
async addAction() {
if (this.isPost) {
// {
// "school_code": "12046",
// "title": "广州番禺职业技术学院"
// }
const data = this.post();
think.logger.debug(data);
let ret = await this.model('school').where({ 'school_code': '12046' }).thenAdd(data);
think.logger.debug(ret);
}
}
```
使用调试工具发起POST请求,
向数据库增加一条记录
请求链接:http://localhost:8360/index/add
方法:POST
请求数据:
```
{
"school_code": "12046",
"title": "广州番禺职业技术学院"
}
```
![](../images/screenshot_1557108001759.png)
## 检索记录
修改/src/controller/index.js,增加helloAction
```js
//模版文件index_hello.html
//http://127.0.0.1:8360/index/hello
async helloAction() {
//分页查找
let schoolList = await this.model('school').page(1,10).countSelect();
think.logger.debug(schoolList);
//假设数据库中存在一条记录
let school = await this.model('school').find({ 'school_code': '12046' })
//将变量传递个模版文件
this.assign('school', school)
return this.display();
}
```
增加模版文件,将变量显示出来
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ThinkJS Application</title>
</style>
</head>
<body>
<h1>{{school.title}}</h1>
<h1>ThinkJS Application</h1>
</body>
</html>
```
控制台输出日志信息
```
[2019-05-06T10:17:44.838] [9628] [INFO] - Server running at http://127.0.0.1:8360
[2019-05-06T10:17:44.847] [9628] [INFO] - ThinkJS version: 3.2.10
[2019-05-06T10:17:44.848] [9628] [INFO] - Environment: development
[2019-05-06T10:17:44.848] [9628] [INFO] - Workers: 1
logic deprecated logic's __after method is deprecated, it will be discarded in the next version node_modules\koa-compose\index.js:42:32
[2019-05-06T10:17:48.971] [10612] [INFO] - mysql://quickstart:quickstart@127.0.0.1:3306/quickstart
[2019-05-06T10:17:49.002] [10612] [INFO] - SQL: SELECT COUNT(think_school.id) AS think_count FROM `think_school` LIMIT 1, Time: 30ms
[2019-05-06T10:17:49.010] [10612] [INFO] - SQL: SELECT * FROM `think_school` LIMIT 0,10, Time: 5ms
[2019-05-06T10:17:49.011] [10612] [DEBUG] - { count: 2,
totalPages: 1,
pageSize: 10,
currentPage: 1,
data:
[ { id: 1,
school_code: '12046',
title: '广州番禺职业技术学院',
cover_image_id: 0,
city: '广州',
type: null,
tags: null,
address: null,
description: null },
{ id: 2,
school_code: '12047',
title: '广州番禺职业技术学院1',
cover_image_id: 0,
city: null,
type: null,
tags: null,
address: null,
description: null } ] }
[2019-05-06T10:17:49.014] [10612] [INFO] - SQL: SELECT * FROM `think_school` LIMIT 1, Time: 1ms
[2019-05-06T10:17:49.037] [10612] [INFO] - GET /index/hello 200 188ms
```
## 完整的控制器文件
```js
const Base = require('./base.js');
module.exports = class extends Base {
indexAction() {
return this.display();
}
//模版文件index_hello.html
//http://127.0.0.1:8360/index/hello
async helloAction() {
let schoolList = await this.model('school').page(1,10).countSelect();
think.logger.debug(schoolList);
//假设数据库中存在一条记录
let school = await this.model('school').find({ 'school_code': '12046' })
//将变量传递个模版文件
this.assign('school', school)
return this.display();
}
//增加数据,使用POST请求
//http://127.0.0.1:8360/index/add
async addAction() {
if (this.isPost) {
// {
// "school_code": "12046",
// "title": "广州番禺职业技术学院"
// }
const data = this.post();
think.logger.debug(data);
let ret = await this.model('school').where({ 'school_code': '12046' }).thenAdd(data);
think.logger.debug(ret);
}
}
};
```
- 内容介绍
- EcmaScript基础
- 快速入门
- 常量与变量
- 字符串
- 函数的基本概念
- 条件判断
- 数组
- 循环
- while循环
- for循环
- 函数基础
- 对象
- 对象的方法
- 函数
- 变量作用域
- 箭头函数
- 闭包
- 高阶函数
- map/reduce
- filter
- sort
- Promise
- 基本对象
- Arguments 对象
- 剩余参数
- Map和Set
- Json基础
- RegExp
- Date
- async
- callback
- promise基础
- promise-api
- promise链
- async-await
- 项目实践
- 标签系统
- 远程API请求
- 面向对象编程
- 创建对象
- 原型继承
- 项目实践
- Classes
- 构造函数
- extends
- static
- 项目实践
- 模块
- import
- export
- 项目实践
- 第三方扩展库
- immutable
- Vue快速入门
- 理解MVVM
- Vue中的MVVM模型
- Webpack+Vue快速入门
- 模板语法
- 计算属性和侦听器
- Class 与 Style 绑定
- 条件渲染
- 列表渲染
- 事件处理
- 表单输入绑定
- 组件基础
- 组件注册
- Prop
- 自定义事件
- 插槽
- 混入
- 过滤器
- 项目实践
- 标签编辑
- 移动客户端开发
- uni-app基础
- 快速入门程序
- 单页程序
- 底部Tab导航
- Vue语法基础
- 模版语法
- 计算属性与侦听器
- Class与Style绑定
- 样式与布局
- Box模型
- Flex布局
- 内置指令
- 基本指令
- v-model与表单
- 条件渲染指令
- 列表渲染指令v-for
- 事件与自定义属性
- 生命周期
- 项目实践
- 学生实验
- 贝店商品列表
- 加载更多数据
- 详情页面
- 自定义组件
- 内置组件
- 表单组件
- 技术专题
- 状态管理vuex
- Flyio
- Mockjs
- SCSS
- 条件编译
- 常用功能实现
- 上拉加载更多数据
- 数据加载综合案例
- Teaset UI组件库
- Teaset设计
- Teaset使用基础
- ts-tag
- ts-badge
- ts-button
- ta-banner
- ts-list
- ts-icon
- ts-load-more
- ts-segmented-control
- 代码模版
- 项目实践
- 标签组件
- 失物招领客户端原型
- 发布页面
- 检索页面
- 详情页面
- 服务端开发技术
- 服务端开发环境配置
- Koajs快速入门
- 快速入门
- 常用Koa中间件介绍
- 文件上传
- RestfulApi
- 一个复杂的RESTful例子
- 使用Mockjs生成模拟数据
- Thinkjs快速入门
- MVC模式
- Thinkjs介绍
- 快速入门
- RESTful服务
- RBAC案例
- 关联模型
- 应用开发框架
- 服务端开发
- PC端管理界面开发
- 移动端开发
- 项目实践
- 失物招领项目
- 移动客户端UI设计
- 服务端设计
- 数据库设计
- Event(事件)
- 客户端设计
- 事件列表页面
- 发布页面
- 事件详情页面
- API设计
- image
- event
- 微信公众号开发
- ui设计规范