自己动手添加些新功能
通过运行前面的HelloBucky项目,以及聊天室Demo的讲解,想必你已经迫不及待想要在项目里增加点新的代码 来熟悉bucky框架。本节设计了一些新的需求,请聪明的你自己动手添加些新功能来满足这些需求,Learning by doing!
功能1:用户登陆
在第一节让Demo跑起来的时候,实现了一个简单的用户模块,轻松跑起来了HelloBucky项目,包含两个功能:
- 用户注册
- 用户登陆
在第二节我们又通过简洁的代码实现了一个简易聊天程序,包含如下三个基本功能:
- 输入用户名
- 发送消息
- 接收消息并显示在对话框里
那么,作为一个正式的产品,我们希望把用户模块添加到聊天程序里。思考10秒钟之后,直接动手拷贝文件夹? 等等,如果你什么都不做就动手拷贝,那么该如何编辑solution.json。别急,使用bucky命令行工具, 我们可以轻松导入一个XARPackage到已有项目。
- 拷贝HelloBucky的
src/account文件夹到minichat的src/server/目录下。 - 拷贝HelloBucky的
test/account文件夹到minichat的test/目录下。 - 在minichat根目录下执行如下的命令来自动导入src/server项目下的新包:
bucky add -package src/server/account/
- 重新构建:
bucky build
bucky deploy
- 对account模块做下单元测试:
bucky run -main test/account/test_account.js
不出意外的话,可以看到测试…失败了!可以看到错误日志:
[error],[2017-12-14 16:20:12.264],<@f4346679-a53b-49d1-89f1-a0539ab1dc39@1@2>,rpc call complete with error, pkgid=account, func=account:account::signup, statusCode=502, errcode=13, result= null, node_core.js:10952
发起了RPC失败,怎么回事呢?
Knowledges: 配置并重置
回顾一下HelloBucky的配置过程,account包是依赖了mysql资源的,我们在HelloBucky的讲解中配置了mysql的knowledge,但是前面导入
到minichat的时候,忘记了这个配置哦。
编辑kowledges.json,配置下account依赖的mysql:
"global.mysql.instances": {
"type": 0,
"object": {
"db_account": {
"schema": "account_db_schema"
}
}
},
"global.mysql.schemas": {
"type": 0,
"object": {
"account_db_schema": {
"onCreate": [
"CREATE TABLE IF NOT EXISTS `users` (`username` VARCHAR( 100 ) NOT NULL ,`password` VARCHAR( 100 ) NOT NULL, `userinfo` VARCHAR( 256 ), UNIQUE KEY (username)) ENGINE=InnoDB DEFAULT CHARSET=utf8;"
]
}
}
},
"global.mysql.configs": {
"type": 0,
"object": {}
}
修改了knowleges.json后要重置它:
bucky k -reset
再次测试:
bucky run -main test/account/test_account.js
可以看到测试成功了。
作业1:使用account模块
我们已经把account模块整合到minichat的后端模块里,发布并测试通过,那么,可以进一步完成需求:
- 使用account模块在HTML5前端代码里实现注册/登陆功能。
- 为account模块增加判断用户是否存在的函数并导出。
- 在minichat模块里对用户进行校验,不存在的用户,忽略其发送的信息。
在这个作业里,你可以充分练习:
- 修改源代码
- 一键构建
- 执行测试
功能2:实现一个四则运算机器人
经过上面的练习,想必你已经对修改->构建->测试的流程很熟悉了,本节我们将学习添加一个全新模块的过程。
输入下面的命令,进入交互式环境。
bucky add -i
选择对src/server项目操作:
◎ init bucky...
◎ install npm packages...
请选择要操作的项目:
────────────────────
1. 新建项目
2. src/server
$请输入序号:2
然后,按提示创建calc包:
◎ 添加新package到项目src/server....
$请输入package名字:calc
接着,选择package类型,由于示例package就是一个除法计算的例子,我们直接选择2:
选择package类型:
────────────────────
1. 新建package
2. 示例package
$请输入序号:2
接着,选择package运行的环境,我们的计算器不需要用到数据库,选择3:
请问这个包需要限制在什么运行时(runtime)加载么?
────────────────────
1. 只允许前端(不能使用mysql/redis/mongo驱动)
2. 只允许后端(可以使用mysql/redis/mongo驱动)
3. 没有限制(不能使用mysql/redis/mongo驱动,一般是工具包)
$请输入序号:3
然后退出继续创建:
$继续添加package? [y/n]: n
完成,可以看到分别添加了源代码和测试目录:
- src/server/calc
- test/calc/
现在,我们构建并测试下:
bucky build
bucky deploy
bucky run -main test/calc/test_calc.js
可以看到除法计算的结果:
---------
test result:
---------
10/2=5
calc这个包默认只实现了一个div函数,请实现以下作业:
作业2:实现四则运算calc功能,并完成四则运算聊天机器人
- 在calc模块中完整实现四则运算函数:calc,能计算四则运算,并做错误处理。
- 编写单元测试代码,并测试。
- 在minichat模块里自动检测表达式,并计算结果后推送。
- 在HTML聊天窗口里测试四则运算聊天机器人能力。