自己动手添加些新功能

通过运行前面的HelloBucky项目,以及聊天室Demo的讲解,想必你已经迫不及待想要在项目里增加点新的代码 来熟悉bucky框架。本节设计了一些新的需求,请聪明的你自己动手添加些新功能来满足这些需求,Learning by doing!

功能1:用户登陆

在第一节让Demo跑起来的时候,实现了一个简单的用户模块,轻松跑起来了HelloBucky项目,包含两个功能:

  • 用户注册
  • 用户登陆

在第二节我们又通过简洁的代码实现了一个简易聊天程序,包含如下三个基本功能:

  • 输入用户名
  • 发送消息
  • 接收消息并显示在对话框里

那么,作为一个正式的产品,我们希望把用户模块添加到聊天程序里。思考10秒钟之后,直接动手拷贝文件夹? 等等,如果你什么都不做就动手拷贝,那么该如何编辑solution.json。别急,使用bucky命令行工具, 我们可以轻松导入一个XARPackage到已有项目。

  1. 拷贝HelloBucky的src/account文件夹到minichat的src/server/目录下。
  2. 拷贝HelloBucky的test/account文件夹到minichat的test/目录下。
  3. 在minichat根目录下执行如下的命令来自动导入src/server项目下的新包:
    bucky add -package src/server/account/
    
  4. 重新构建:
    bucky build
    
  5. 对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的后端模块里,发布并测试通过,那么,可以进一步完成需求:

  1. 使用account模块在HTML5前端代码里实现注册/登陆功能。
  2. 为account模块增加判断用户是否存在的函数并导出。
  3. 在minichat模块里对用户进行校验,不存在的用户,忽略其发送的信息。

在这个作业里,你可以充分练习:

  1. 修改源代码
  2. 一键构建
  3. 执行测试

功能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 run -main test/calc/test_calc.js

可以看到除法计算的结果:

---------
test result:
---------
10/2=5

calc这个包默认只实现了一个div函数,请实现以下作业:

作业2:实现四则运算calc功能,并完成四则运算聊天机器人

  1. 在calc模块中完整实现四则运算函数:calc,能计算四则运算,并做错误处理。
  2. 编写单元测试代码,并测试。
  3. 在minichat模块里自动检测表达式,并计算结果后推送。
  4. 在HTML聊天窗口里测试四则运算聊天机器人能力。

results matching ""

    No results matching ""