快速初始化

使用脚手架,对项目进行快速初始化

$ mkdir egg-example && cd egg-example
$ npm init egg --type=simple
$ npm i

启动项目

$ npm run dev
$ open http://localhost:7001

访问效果如下

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8NRKYXKR-1595137239837)(https://www.iming.info/wp-content/uploads/2020/07/wp_editor_md_976949143a4a48533829d49a6bdde651.jpg)]

逐步搭建

初始化项目

$ mkdir egg-example
$ cd egg-example
$ npm init
$ npm i egg --save
$ npm i egg-bin --save-dev

添加相关的执行脚本

{"name": "egg-example","scripts": {"dev": "egg-bin dev"}
}

编写Controller

const Controller = require('egg').Controller;class HomeController extends Controller {async index(){this.ctx.body = 'Hello World';}
}module.exports = HomeController;

添加路由

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

添加配置文件

exports.keys = '_1595046215730_9281';

此时目录文件结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kYDqwg5U-1595137239859)(https://www.iming.info/wp-content/uploads/2020/07/wp_editor_md_6b3139be16c29f38aeb986ca436c91b7.jpg)]

访问效果

此时输入命令

 npm run dev

输入地址进行访问

http://localhost:7001

效果如下

静态资源

这里使用egg.js的插件完成对egg.js文件进行处理。

启动项目,访问静态资源

http://localhost:7001/public/js/lib.js

然后就可以访问了。

模板渲染

在本例子中,使用egg-view-nunjucks作为插件,进行模板的渲染

安装插件

C:\Users\Administrator\Desktop\untitled2\egg-example>npm i egg-view-nunjucks --save
npm WARN acorn-jsx@5.2.0 requires a peer of acorn@^6.0.0 || ^7.0.0 but none is installed. You must install peer dependencies yo
urself.
npm WARN co-mocha@1.2.2 requires a peer of mocha@>=1.18 <6 but none is installed. You must install peer dependencies yourself.
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.2.13 (node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.2.13: wanted {"os":"darwin","arch":"any"} (cu
rrent: {"os":"win32","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@2.1.3 (node_modules\nunjucks\node_modules\fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@2.1.3: wanted {"os":"darwin","arch":"any"} (cur
rent: {"os":"win32","arch":"x64"})+ egg-view-nunjucks@2.2.0
added 1 package from 1 contributor in 11.263s36 packages are looking for fundingrun `npm fund` for detailsC:\Users\Administrator\Desktop\untitled2\egg-example>

完成了插件的安装

开启插件

配置如下目录,开启插件

config/plugin.js

配置内容如下

exports.nunjucks = {enable: true,package: 'egg-view-nunjucks'
};

修改总的配置文件

exports.keys = "_fduhuhrefguir83238uhfr";exports.view = {defaultViewEngine: 'nunjucks',mapping: {'.tpl': 'nunjucks',},
}

编写模板文件

在app/view文件下增加新的模板文件。

<!-- app/view/news/list.tpl -->
<html><head><title>Hacker News</title><link rel="stylesheet" href="/public/css/news.css" /></head><body><ul class="news-view view">{% for item in list %}<li class="item"><a href="{{ item.url }}">{{ item.title }}</a></li>{% endfor %}</ul></body>
</html>

添加控制器和路由

const Controller = require('egg').Controller;class NewsController extends Controller {// 同步,设置模板参数列表async list() {const dataList = {list: [{ id: 1, title: 'this is news 1', url: '/news/1' },{ id: 2, title: 'this is news 2', url: '/news/2' }]};// 等待进入renderawait this.ctx.render('news/list.tpl', dataList);}
}module.exports = NewsController;

添加路由

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

访问 http://localhost:7001/news 即可看到页面

编写service

在app/service 目录下,添加service相关文件。
代码如下

const Service = require('egg').Service;class NewsService extends Service {async list(page = 1) {// read configconst { serverUrl, pageSize } = this.config.news;// use build-in http client to GET hacker-news apiconst { data: idList } = await this.ctx.curl(`${serverUrl}/topstories.json`, {data: {orderBy: '"$key"',startAt: `"${pageSize * (page - 1)}"`,endAt: `"${pageSize * page - 1}"`,},dataType: 'json',});// parallel GET detailconst newsList = await Promise.all(Object.keys(idList).map(key => {const url = `${serverUrl}/item/${idList[key]}.json`;return this.ctx.curl(url, { dataType: 'json' });}));return newsList.map(res => res.data);}
}module.exports = NewsService;

修改Controller 添加相关的service

const Controller = require('egg').Controller;class NewsController extends Controller {async list() {const ctx = this.ctx;const page = ctx.query.page || 1;const newsList = await ctx.service.news.list(page);await ctx.render('news/list.tpl', { list: newsList });}
}module.exports = NewsController;

此时ctx.service.news.list 提供相关的数据。

增加配置文件

这时增加相关的配置文件

exports.news = {pageSize: 5,serverUrl: 'https://hacker-news.firebaseio.com/v0',
};

在模板里添加自定义函数

安装插件

npm i moment --save
// app/extend/helper.js
const moment = require('moment');
exports.relativeTime = time => moment(new Date(time * 1000)).fromNow();
<!-- app/view/news/list.tpl -->
{{ helper.relativeTime(item.time) }}

编写中间件

// app/middleware/robot.js
// options === app.config.robot
module.exports = (options, app) => {return async function robotMiddleware(ctx, next) {const source = ctx.get('user-agent') || '';const match = options.ua.some(ua => ua.test(source));if (match) {ctx.status = 403;ctx.message = 'Go away, robot.';} else {await next();}}
};// config/config.default.js
// add middleware robot
exports.middleware = ['robot'
];
// robot's configurations
exports.robot = {ua: [/Baiduspider/i,]
};

最后

对于egg.js 来说,总体上也是MVC三层架构。外加中间件,设置相关的文件。
以后的内容将会再次挨个深入讲解。

学习 | egg.js 从入门到精通相关推荐

  1. 【Vue学习笔记】尚硅谷Vue2.0+Vue3.0全套教程丨vue.js从入门到精通

    尚硅谷Vue2.0+Vue3.0全套教程丨vue.js从入门到精通 1.Vue核心部分 1.1 Vue简介 1.1.1 Vue是什么? Vue是一套用于构建用户界面的渐进式JavaScript框架. ...

  2. 前端-Vue.js从入门到精通基础笔记(理论+实操+知识点速查)

    #[2022.3]尚硅谷Vue.js从入门到精通基础笔记(理论+实操+知识点速查) 前言 本文完全基于 参考资料:加工整理而成,包括其代码,案例,资源等.前置知识是学习尚硅谷的视频教程,本文配合其教程 ...

  3. 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》

    20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...

  4. 2023最全软件测试学习路线图(从入门到精通)

    六维全息课程注重综合能力培养,从入学到职后一站式服务测试开发人才.2023年最新软件测试学习路线图,从入门到精通一应俱全. 9阶段专业课+11大专项测试项目 适应互联网企业测试开发需求. 对于想入行学 ...

  5. 最新软件测试学习资源(小白入门到精通)

    最新软件测试学习资源(小白入门到精通) 第一阶段:软件测试环境配置与管理 此阶段,主要是熟练掌握在各种主流PC环境中,如何高效准确的搭建测试环境,并同时掌握关于软件基础运行环境的相关知识,为后续课程学 ...

  6. 【JS从入门到精通】08-构造函数与原型对象

    笔记来源:尚硅谷最新版JavaScript基础全套教程完整版(140集实战教学,JS从入门到精通)_哔哩哔哩_bilibili 文章目录 构造函数与原型对象 1.使用工厂方法创建对象 2.构造函数 构 ...

  7. js 移动端 滑块验证码插件_VUE技术详解,Vue.js从入门到精通

    [Vue.js简介] Vue.js是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue采用自底向上增量开发的设计.Vue的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整 ...

  8. 自学python需要的软件-学习Python,从入门到精通,其实只需要两个月就够了

    毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划, ...

  9. php+html5+jquery断点续传_PHP学习路线:PHP从入门到精通教程

    PHP入门到精通需要多久?PHP学习难吗?PHP快速入门的学习方法有哪些?这是很多人在PHP学习阶段,经常会遇到的PHP问题,完整的PHP学习路线图对于PHP小白的重要性是很有必要的.PHP从入门到精 ...

最新文章

  1. 上海有线通共享上网设置(解决大部分局域网问题)
  2. 烂泥:vcenter5.5无AD下的安装与配置
  3. LeetCode MySQL 580. 统计各专业学生人数
  4. 十大经典排序算法之冒泡排序【一】
  5. 视频讲解(RCNN,FasterRCNN,FPN,MaskRCNN)
  6. [解决方案]Window 2008 R2 + IIS7.5 + VS2013 错误代码 0x80070002
  7. Unix/Linux的内存映射
  8. Linux C++ 获取文件夹大小2(通过ftw实现)
  9. Jarvis_Web 刷题记录_Bellone北洛
  10. python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
  11. 基于JAVA的TPL解释器
  12. signal 11 (SIGSEGV), code 2 (SEGV_ACCERR)的原因和解决办法
  13. 通达oa与php环境冲突,迁移通达OA过程中所遇到的数据库问题
  14. 双等位基因(biallelic sites )和多等位基因(multiallelic sites)
  15. 数仓开发之DWD层(一)
  16. MySQL的rollback--大事务回滚
  17. 知识文库杂志知识文库杂志社知识文库编辑部2022年第14期目录
  18. Java 获取 n个 工作日【前】或【后】的日期
  19. Android 获取 唯一GUID ,替换 IMEI (兼容 Android 10+获取IMEI问题)
  20. python爬取酒店信息练习

热门文章

  1. 阅文集团副总裁傅徐军:最佳技术架构选型方法论
  2. javaScript中获取时间
  3. 迭代器——STL关键所在
  4. MySQL的索引类型及简单优化
  5. C#实现在同一窗口内显示多个其它窗口/另一个窗口
  6. Verilog状态机的编写学习
  7. 《Iphone SDK3开发快速上手》
  8. 透明化网络管理,事前处理实现轻松运维
  9. 一步一步学Silverlight 2系列(8):使用样式封装控件观感
  10. 解决swagger-ui加了Oauth2后无法访问的问题