安装 ThinkJS 命令
$ npm install -g think-cli
安装完成后,系统中会有 thinkjs 命令(可以通过 thinkjs -V 查看 think-cli 的版本号,此版本号非 thinkjs 的版本号)。如果找不到这个命令,请确认环境变量是否正确
创建项目
执行 thinkjs new [project_name] 来创建项目,如:
$ thinkjs new demo;
$ cd demo;
$ npm install;
$ npm start;
打开浏览器访问 http://127.0.0.1:8360/,如果是在远程机器上创建的项目,需要把 IP 换成对应的地址。
安装调试工具ndb
npm install -g ndb
首先要确保你的 Node.js 环境 >= 8.0.0,然后使用 npm install
就可以非常方便的完成安装。由于 ndb 依赖 Puppeteer 安装过程中会去下载 Chromium 所以下载过程可能会有一定的时间,请各位同学耐心等待。如果有碰上权限问题官方提示可以尝试增加 --unsafe-perm=true --allow-root
参数解决。
使用调试工具调试
在vscode命令行工具里输入
ndb npm run
即可打开ndb调试页面
熟悉chrome dev调试的对此不会陌生
进入页面后在左侧菜单中找到
npm scripts
菜单,在次菜单下鼠标放到start上后会出现开始三角按钮,点击按钮即运行调试模式.可以尝试在执行代码中打断点,和chrome dev效果一致.
同时可以修改代码,保存即可同步代码.
开始添加业务逻辑
我们要做一个logger上报和查询的api
- 连接mysql
src->config->adapter.js 文件下修改代码,连接sql字符串
/**
* model adapter config
* @type {Object}
*/
exports.model = {
type: 'mysql',
common: {
logConnect: isDev,
logSql: isDev,
logger: msg => think.logger.info(msg)
},
mysql: {
handle: mysql,
database: 'thinkjsplus',
prefix: '',
encoding: 'utf8',
host: '127.0.0.1',
port: '3306',
user: 'root',
password: 'root',
dateStrings: true
}
};
- 在mysql中新建database 名为
thinkjsplus
创建table,并写入初始数据
-- ----------------------------
-- Table structure for `thinkjsplus_logger`
-- ----------------------------
DROP TABLE IF EXISTS `thinkjsplus_logger`;
-- auto-generated definition
create table thinkjsplus_logger
(
id int auto_increment,
user varchar(100) null
comment '用户信息',
port varchar(200) null
comment '端口信息',
info varchar(500) null
comment 'log 信息',
time datetime not null
comment '上报时间',
constraint thinkjsplus_logger_id_uindex
unique (id)
)
comment 'web error logger';
alter table thinkjsplus_logger
add primary key (id);
-- ----------------------------
-- Records of thinkjsplus_logger
-- ----------------------------
INSERT INTO `thinkjsplus_logger` VALUES ('admin', 'localhost','test');
INSERT INTO `thinkjsplus_logger` VALUES ('user1', 'www.example','test');
创建 Controller
使用命令
thinkjs controller logger
之后再src/controller文件夹下会生成logger.js文件,我们的逻辑就写在这里面
const Base = require('./base.js');
const moment = require('moment');//引用了moment库,需要安装npm install --save moment
module.exports = class extends Base {
async listAction() {
if (this.isPost) {
let data = await this.model('thinkjsplus_logger').select();
return this.success(data);
} else {
return this.json(null);
}
}
async addAction() {
let data = this.post();
data.time = moment(new Date()).format('YYYY-MM-DD HH:mm:ss');
if (think.isEmpty(data.id)) {
let res=null;
try {
//保存
res = await this.model('thinkjsplus_logger').add(data).catch(err => {
return think.isError(err) ? err : new Error(err);
});
} catch (e) {
return this.fail(1000, e);
}
if (think.isError(res)) {
return this.fail(1000, res.message);
}
if (res) {
this.success(true);
} else {
this.success(true);
}
} else {
//更新
let res = await this.model('thinkjsplus_logger').update(data);
if (res) {
this.success(true);
} else {
this.success(true);
}
}
}
};
请求测试
- 使用postman发送添加请求
// url server为全局变量 http://localhost:8360/
{{server}}logger/add
//body json
{
"user":"wwmin",
"port":"localhost",
"info":"test"
}
在ndb的listAction中打断点进行调试,一切顺利就会看到返回结果为true
- 使用postman发送查询请求
// url server为全局变量 http://localhost:8360/
{{server}}logger/list
请求方式为post,但是没有参数
在ndb的listAction中打断点进行调试,一切顺利就会看到返回结果为 list 对象.
说明接口调试完成.
终于将thinkjs跑通了接口api,为以后的搭建后台api铺平了道路,当然里面还有许多没考虑到的地方,比如 权限验证,service服务,model,middleware,logic,extend等方面都没有涉及,在这之后会进一步研究,并将此文继续补充完整.