0111月

Egg.js小记 – xhsdnn的专栏

写反面

涉及(以下略号):egg)的根本引见在这里就不再赘述了,官方网站非凡的明确的的。,下面直觉的对egg的申请书及规律停止叙说。

一、商定

率先,egg其实的是继任于koa的,egg在koa的依据排好队伍了很多商定和公以为优秀的,可展开性也很高。。但有些住处附近的当地酒店不得不依照这些国际公约和公以为优秀的。,譬如,记载体系结构。:
记载体系结构

二、内置女朋友

由于它是本KOA的,它必定伴奏KOA的内置女朋友。,包罗:Application, Context, Request, Response;同时,展开女朋友有:Controller, Service, Helper, Config, Logger。

若何申请书和获取这些女朋友将被写在下面。。

三、技击术

下面大概说了一下记载体系结构像这样egg眼镜框的少许女朋友,下面经过技击术来附加的知识egg。

由于它是压紧眼镜框。,这是第一提栗树的耐用的。。

1.

这是根记载说话中肯第一反照。,率先,它不同的变得越来越大前端眼镜框说话中肯初级课程文档。,在egg中为了是用来做少许设定初值的任务,缺少像这样的发稿。,因而是可选的。。
同样本人能做些什么呢?Application是大局申请书程式女朋友。,在第一申请书程式中,独自的第一举例将被举例化。,穿过整个的申请书。本人可以在开端的时辰做少许专用化的举措。,如搜集和在Application下面成立属性或办法。,就像像这样:


module.exports = app => {
    
    app.projectName = ''eggManual''

    (异步) () => {
        
        (=申请书程式 beforeStart==");
    });

    (异步) () => {
        (=申请书程式 ready==");
    })

    (异步) () => {
        (=申请书程式 beforeClose==");
    })
};

启动时,把持台比分列举如下:
启动

在这里的申请书程式是申请书程式女朋友。,它将经过参量或否则方法在否则实习工作增加。。

2.

下面本人说本人需求写第一耐用的。,若何明确的度申请书的URL?答案是中。它明确的度了本人的路由分类。,所有些人申请书首都经过为了路由分类去找对应的Controller,像这样也可以取得一致把持。。
接下来,本人明确的度耐用的申请书的URL。:


module.exports = app => {
    const { router, controller } = app;

    
    ("main", "/api/main", );
}

REST风骨可以是谷歌或百度。。

让本人来讨论一下明确的度URL的分类。,本人可以直觉的明确的度第一申请书典型并列弯下面的愿意的。,就像像这样:


module.exports = app => {
    const { router, controller } = app;

    
    ("/api/main/:id", 启示)
}

在这里有第一周转。(帖子), ''/api/posts'', )有助于使相等于明确的度一组REST路由。,在这里是官方网站的一种整队。:

Method Path Route Name Controller.Action
GET /posts posts app.controllers.posts.index
GET /posts/new new_post app.controllers.posts.new
GET /posts/:id post app.controllers.posts.show
GET /posts/:id/edit edit_post app.controllers.posts.edit
POST /posts posts app.controllers.posts.create
PUT /posts/:id post app.controllers.posts.update
DELETE /posts/:id post app.controllers.posts.destroy

像这样,前述的句子相当于以下第七明确的度。:

("/api/main", 线索)
("/api/main/new", 新的)
("/api/main/:id", 启示)
("/api/main/:id/edit", 编纂者)
("/api/main", 创办)
("/api/main/:id", 替换
("/api/main/:id", 销毁)

应和的把持器是把持器记载。,反面明确的度的办法的系统命名法。。

下面明确的度的get申请书的进口商品是,申请书方法为::port/api/main,把持器记载说话中肯显示办法被召唤。,否则如此云云。

3. 把持器(把持器)

率先,发送申请书召唤把持器说话中肯办法。,把持器的主要任务是承认用户的参量和价钱。,而且将处置后的参量发送到Service层,而且,Service比分言归正传给用户。。
参量的处置包罗但不限于参量VRI。,自然,你可以直觉的使后退走。Service,都在Controller层处置,但本人不计划同样做。。

把持器记载可以伴奏多级。,譬如,把持器记载中有第一V1发稿夹。,在V1发稿夹下有第一发稿。,而且可以写信反映路由使具必然形式。,依此类推。

接下来,本人将在把持器中写信反映该办法。:


const Controller = require(''egg'').Controller;

classMainControllerextendsController {
    async show() {
        let { id } = this.ctx.params; 
        let { name } = this.ctx.query; 
        let options = {
            id: id,
            name: name
        }
        
        let info = await this.ctx.service.main.getInfo(选择最大限度的);
        this.ctx.body = {
            code: 0,
            data: info
        };
        this.ctx.status = 200;
    }
}
module.exports = MainController;
  • GET获取用户参量的申请书其实的被省略了。request,充分的加密是:;否则申请书不克不及省略。request的,获取参量加密:
  • ctx即为Context背景,它成立在下面。requestapp平坦女朋友。

4. 耐用的(耐用的)

Service层拿到Controller层后录音,依必须先具备的表现录音库或否则功能。,充分地言归正传比分。,应验申请书的简略行动方向。,下面是在耐用的记载中写信反映发稿。:

const Service = require(''egg'').Service;

classMainServiceextendsService {
  async getInfo(选择最大限度的) {
    
    options.height = 180;
    options.age = 20;
    return options;
  }
}

module.exports = MainService;

我不会的在在这里反省录音库。,直觉的言归正传用户信息,可以将录音库功能添加到后续文字中。。

搬运人是用来试验的的。,轻蔑的拒绝或不承认egg自带HttpClient,但我依然以为它更视觉的。,看一眼申请书的比分。:
申请书比分

说到在这里,第一本egg的申请书曾经作曲应验了,但这是最简略的。,本人而且很多egg预备的东西缺少申请书,弯下并显示否则功用。。

5. 使具必然形式(使具必然形式)

egg预备5种使具必然形式发稿:
– :默许使具必然形式发稿;
– config.local.js:开拓包围着的说话中肯使具必然形式,兼并默许使具必然形式,相反的系统命名法单调的生活默许使具必然形式。;
– config.prod.js:制造包围着的说话中肯使具必然形式,兼并默许使具必然形式,相反的系统命名法单调的生活默许使具必然形式。;
– config.test.js:试验的包围着的说话中肯使具必然形式,兼并默许使具必然形式,相反的系统命名法单调的生活默许使具必然形式。;
– config.unittest.js:单元试验的包围着的说话中肯使具必然形式,兼并默许使具必然形式,相反的系统命名法单调的生活默许使具必然形式。;

使具必然形式发稿列举如下所示(将有赠送的的Co):

module.exports = {
    key: value
}

exports.key = value;

6. 位于正中的设备(位于正中的设备)

egg和koa的位于正中的价相等地,所有些人洋葱环。,以下是以下愿意的,一是官方网站地图集。:
洋葱圈榜样图

接下来,本人作曲了两个试验的位于正中的设备。middlewareOnemiddlewareTwo


module.exports = (选择最大限度的, 申请书程式) => {
    return async functionmiddlewareOne(CTX), 下一步) {
        (=申请书 one==");
        await next();
        (=反响 one==");
    }
};


module.exports = (选择最大限度的, 申请书程式) => {
    return async functionmiddlewareTwo(CTX), 下一步) {
        (=申请书 two==");
        await next();
        (=反响 two==");
    }
};
  • options:位于正中的设备参量,可在Config中使具必然形式;
  • appctx外面的也重要的人物说过。,这两个女朋友可以在位于正中的设备中做很多事实。,譬如,你可以开始它。修正参量等。;
    next作为第一应变量,以下将说。。

在应验位于正中的设备继,本人需求说本人现在所说的。使具必然形式在:


exports.middleware = [''middlewareOne'', ''middlewareTwo'']; 
exports.middlewareOne = { 
    msg: "extra message"
}

洋葱环榜样谓语申请书和反响将经过M。,经过next()办法放假,当申请书时表现next()办法漏过到下第一位于正中的价钱。,看一眼为了表现按次图,本人应当有第一明确的的忧虑。,如图:
位于正中的设备按次

7. 展开(展开)

眼镜框说话中肯数量庞大的数量庞大的女朋友伴奏展开。,本人可以在数量庞大的数量庞大的女朋友上展开自明确的度属性和办法。,可展开女朋友有:ApplicationContexthelperRequestResponse
写展开的办法是创办应和的发稿。,而且将女朋友与原始女朋友兼并。prototype上,像这样,取得了展开功用。,在展开拓稿夹下创办展开拓稿:
extend

为什么application会有三个展开拓稿呢?关照为了命名应当就能命令了,其实的egg也伴奏依包围着的展开,像这样,本人可以展开本人在赠送的包围着的中需求的功用。。

8. 可插件(可插件)

一开端,布满发生了疑问。,为了可插件是干嘛的?egg预备了位于正中的设备的功用,还可以作曲展开名。,它对可插件机制的冲击很小。。
再我改观了我的角度。,由于我以为到了第一句子。:在是有理的。,egg像这样做必然有他的说理,像这样,附加的知识为了可插件的功能。,在这里的官方网站说明了位于正中的设备可能性在的成绩。。
可以砍掉可插件。,轻蔑的拒绝或不承认不克不及孤独运转,但它可以作为一种包装整队在。,它也可以实习工作在NPM上。,譬如,不义的行为处置可插件。、模板引擎可插件、与录音库中间定位的可插件和与安全性中间定位的可插件等。。这些都是小手提皮包。,每个egg工程都可以复用,它们私下缺少耦合。,它也向前推了开拓最大限度的。,它还预备了自明确的度下层眼镜框的最大限度的。。

给我第一栗树。,第一简略的记载体系结构:
plugin

召唤可插件系统命名法。transform-int,必然有第一。:


{
    "eggPlugin": {
        "name": 特林特
    }
}

这很简略。:


module.exports = {
    运输船朊(ARG) {
        returnparseInt(ARG)
    }
}

其实,可插件相当于第一小申请书程式。,独自的少许发稿垂下了。,这执意本人需求依托工程申请书的引起。,申请书时发稿说话中肯使具必然形式:

const path = require(方法);

exports.tranInt = {
    enable: true,
    path: (__dirname, ''../lib/plugin/transform-int'')
}

由于它在Application几乎散布,因而用它可以召唤可插件办法。。

写在支持

算是第一egg的小笔记吧,我以为多吃栗树。,但觉得有些人长。,有时期替换GITHUB,只需直觉的检查加密那就够了。。

发表评论

电子邮件地址不会被公开。 必填项已用*标注