二、安装Egg.js及项目配置和相关使用

紧接上文, 配置好mongodb环境后, 我们就要开始创建Egg.js项目了

附注: 此次是windows环境项目, node.js版本8.x以上, 也不怎么讲原理, 主要是先上手
首先附上Egg.js文档目录: https://www.eggjs.org/zh-CN/intro/quickstart

  • 安装Egg.js, 新创建一个文件夹, 这里的为egg-demo, 执行命令
npm init egg --type=simple

这里采用的是egg.js官方提供的simple的模板
然后就可以看到项目文件:

image.png

然后执行npm install命令, 安装相关依赖包, 然后可以使用npm run dev启动项目, 启动之后, 会默认生成一个http://127.0.0.1:7001的路径地址, 文件介绍如下:
image.png

运行项目后, 在浏览器地址栏输入http://127.0.0.1:7001, 就可以看到页面
image.png

由于电脑还有其他egg.js项目启动, 所以我的是http://127.0.0.1:7002

  • 下面我们开始第一步: 了解路由
    具体的相关介绍大家可以移步官网, 我这里就不一一介绍水字数了, 首先我们可以直接点开router.js文件
    image.png

    里面是帮我们配好了自带的home.js的路由, 文件路径在app/controller/home.js
    image.png

    我们在浏览器页面显示的hi egg就是这个文件显示的, ctx.body = 'hi, egg';
    为了了解相关, 我们在app/controller/目录下创建一个product.js的文件
const Controller = require("egg").Controller; // 引入Controller组件
class ProductController extends Controller { // 需使用驼峰命名法
    async index() {
        const { ctx } = this;
        ctx.body = "hello, product!";
    }
}
module.exports = ProductController;

然后到router.js文件声明, 为get请求

module.exports = app => {
    const { router, controller} = app;
    router.get('/', controller.home.index);
    router.get("/product", controller.product.index);
}

然后在页面路径改为http://127.0.0.1:7001/procuct, 如图:

image.png

然后介绍一下get请求的传参, 一般分为两种,
第一种为: http://127.0.0.1:7001/product?id=100&name=张三
第二种为: http;//127.0.0.1:7001/product/123
image.png

看图就知道, 第一种为query的方式, 第二种为params方式, 在路由定义
image.png

在页面可以看到:
image.png

image.png

当然, 这里打印的是对象, 如果要取值的话, ctx.query.id, ctx.query.name, 关于第二种的话就是ctx.params.id

  • router的其他请求
    经常用的其实也就是get, post, put, delete我们说的增删改查
    image.png

    先在config/config.default.js增加如下配置, 后面需要用到postman工具
    然后在controller/product.js处, 添加我们的增删改查接口
    image.png

然后在路由表添加如下请求

router.get("/product", controller.product.index); // 列表数据
router.post("/product/create", controller.product.create); // 新增接口
router.put("/product/update/:id", controller.product.update); // 修改接口
router.delete("/product/delete/:id", controller.product.delete); // 删除接口

image.png

路由处添加完后, 回到我们的product.js处, 找到create接口, 在里面接收
image.png

然后打开postman软件, 模拟请求我们的新增接口
image.png

image.png

可以看到, 是请求成功的, 接下来我们看修改请求和删除请求, 这两个请求有点类似, 所以放一起说了
image.png

在controller/product.js处的update和delete方法处, 写好代码, 然后到postman处, 尝试去请求, 是否可以拿到ID
image.png

image.png

image.png

可以看到, 都是OK的, 可以拿到相对应的参数
下面我们来说一下它的service服务

  • Service服务

具体详情, 可看官方文档, https://www.eggjs.org/zh-CN/basics/service, 我们在这里就不多写了, 具体逻辑, 校验啥的往里丢就行了

image.png

然后我们在app文件夹下, 新建一个service的文件, 里面再创建一个product.js的文件, 然后模拟一个列表返回请求, 因为我们现在还没到连接数据库阶段, 所以先进行模拟

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

class ProductService extends Service {
    async index() {
        return {
            id: 100,
            name: "西瓜",
            weight: 100
        }
    }
}

module.exports = ProductService;

然后我们回到路径为app/controller/product.js文件, 在index()方法中稍做修改

image.png

然后再到浏览器
image.png

可以看到, 是返回成功的
那我们在路径为app/controller/home.js里面是否可以使用到service/product.js里的内容呢?我们一起来试一试

"use strict"

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

class HomeController extends Controller {
    async index() {
        const { ctx } = this;
        const res = await ctx.service.product.index();
        ctx.body = res;
        //  ctx.body = "hi, egg";
    }
}
module.exports = HomeController;
image.png

可以看到, 这样也是OK的, 到了这里, 我们了解egg基础的到这里就结束了, 基于现在都是前后端分离的模式, 后面还会出一节使用egg.js+mongodb+vue3的前后端分离文章

ejs模板引擎

到了这里, 也说一个egg.js的模板引擎, 也就是egg.js官网中的模板渲染: https://www.eggjs.org/zh-CN/core/view, 但我们在这里说的是ejs的一个模板, 全称egg-view-ejs相对来说比较成熟, 给大家放个链接https://www.npmjs.com/package/egg-view-ejs

image.png

image.png

先进行安装npm install egg-view-ejs --save, 安装完毕后, 在路径为config/plugin.js里面, 复制上面的配置
image.png

然后在路径为config/config.default.js文件上, 继续配置
image.png

配置完后, 我们在app文件夹下, 新建一个名为view的文件夹, 然后在view的文件夹下, 新建一个index.html的文件
image.png

然后到路径为app/controller/home.js文件下, 使用ctx.render()进行渲染, 第一个值为路径, 第二个值为要传进去的变量
image.png

然后回到index.html, 把传进来的变量, 添加进去, ejs使用变量, 有一个特定的格式, 为<%=变量%>
image.png

然后我们在浏览器输入127.0.0.1:7001
image.png

可以看到, 这是OK的, 那我们怎么在里面渲染列表呢?我们来试一试, 在home.js里面写一个list数组
image.png

然后在index.html页面上, 写一个ul列表, 使用for循环, 感觉和PHP的是不是差不多
image.png

然后我们去浏览器页面, 可以看到, 是渲染出来的
image.png

如何使用静态资源呢, 也是一样的, egg.js的静态资源是统一放在public文件夹的, 下面我们在public文件夹进行下演示, 创建css, image, js三个文件夹, 然后在index.html中引入
image.png

image.png

image.png

好了, 这次的就说到这里了, 如果有对ejs感兴趣的, 可以移步https://ejs.bootcss.com/ 官网看看
如果本次的分享对你有用, 请动动你的小手点个赞哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容