1

接前一篇,阿里egg.js初体验(一) 我们继续我们的egg之旅。
我们已经完成了对于项目结构的搭建,现在我们需要开始业务的编写。
注意到,目录里controller和service两个文件夹,这里也是我们编写业务逻辑的主要地方。

controller:用于解析用户的输入,处理后返回相应的结果。
service:用于编写业务逻辑层,可以复用。

假设我们现在完成调用一个git rest api的二次开发工具,主要内容包括
查看用户参与的项目,新建一个项目,管理项目人员等等。

根据需求,service里我们需要直接调用git的api,显然,就是需要一个curl的类型功能,egg提供了一个curl,它是通过对context类对扩展实现的,这样在
service里,我们可以直接通过如下方式访问一个git rest api:

const { data: idList } = await this.ctx.curl(`${gitUrl}/users`, {
      data: {
        id: '"$id"',
      },
      dataType: 'json',
    });

这样我们就把用户列表设置到idList里。
下一步我们需要在controller调用这个service:

const userList = await ctx.service.git.list(id);

注意,egg中,所有模块之间的调用,都是通过名字来调用的,如果我们把之前的service导出为:

module.exports = Git;

那么,controller,就能通过this.ctx.service.git.methodName()来访问到对应的service里的方法了。在使用导出的模块时,需要把导出的模块名改为驼峰标准,且首字母变为小写。

回到controller中,
我们可以把获取到的数据放到render的中进行渲染,然后把渲染后的结果发给游览器,或者,也可以把数据直接赋值给ctx.body,然后以json方式返回。

这样,一个简单的node应用就算搭建完成了。


座大山
83 声望15 粉丝