Egg.js入门视频教程 - 200分钟学会Egg.js框架 掌握全栈开发( 完结)
Egg.js入门视频教程 - 200分钟学会Egg.js框架 掌握全栈开发( 完结)
https://www.bilibili.com/video/BV1s3411C71V 1
01.课程介绍和Egg.js开发环境搭建
Egg.js的语法仍然是JavaScript。也就是说,你不用再学习Golang或者Java这样的基础语言了。
而是只要学习Egg.js的框架API,就可以快速开发全栈。
Egg.js是阿里旗下为数不多的,让人放心使用的开源项目。Egg.js为企业级框架和应用而生的Node.js框架,Egg(简写)奉行【约定优于配置】的框架,按照一套同意的约定进行应用开发。适合团队开发,学习成本小,减少维护成本。
yarn create egg --type-simple
特征对比
Egg.js
Express/Koa
代码规范性
符合MVC模式
灵活编码
(MVC开发模式)
Controller/Service/View
没有明确规范
学习成本
易
创建机制/扩展机制
有
无
多线程管理
有
有
无
HttpClient集成
无
02.Egg.js项目结构介绍
egg3
yarn run dev 开发
yarn start 服务终端 一直run
yarn stop
03.Controller控制器的编写方法
04.Egg.js下的单元测试编写
yarn test 单元测试
如果是异步 测试也要异步
async getGirls(){
const{ctx}= this;await new Promise(resolve =>{
setTimeout(()=>{
resolve(ctx.body ='<h1>小红,正向你走来<h1>');
},5000);
});
05.Get请求和参数传递
//自由传参模式
router.get('/hello/:name', controller.home.hello);
post
REST Client vscode
根目录 test.http
config
//CSRF enable false config. security ={
csrf:{
enable: false,
ctx.body = ctx.request.body;
06.POST请求和参数接受
07.Service的编写和使用方法
Service 封装的一个抽象层,数据库交互的代码保持Controller 逻辑更加简单独立性,Service 多个Controller写测试用例简单
Controller
const { Service } = require('egg');
class UserService extends Service {
async getUser() {
return 'egg';
}
}
module.exports = UserService;
控制器
async upload(){
const { ctx } = this;
const res=await ctx.service.home.getUser();
ctx.body=res
// ctx.body = ctx.request.body;
}
home文件名
08.View中使用EJS模板引擎-1
对SEO 非常友好
-Egg php 后端的一致性认可
|中台 一次登录 SPA
ejs thinkphp-ejs
yarn add egg-view-ejs
还要在插件配置开启
config.default
config.view={
mappping:{
".html":"ejs"
}
}
config.ejs={}
plugin.js
exports.ejs={
enable:true,
package:'egg-view-ejs',
}
app/view/index.html
await ctx.render('index.html');
.ejs
09.View中使用EJS模板引擎-2
10.View中使用EJS模板引擎-3
11.Cookie的增删改查
ctx.cokies.set()
ctx.cookies.get()
加密
ctx.cookies.set('name', 'koo',{maxAge:10000,httpOnly:false,encrypt:true});
ctx.cookies.get('name', {encrypt:true});
12.Cookie的配置和加密
13.Session的相关操作
config.default 设置session...参数
14.Egg.js中间件的编写和使用
module.exports = options=>{
return async (ctx, next)=>{
console.log('111111111111111111111');
await next();
};
}
midde/log.js
config.default
config.middleware=["logmidd"]
全局
路由
const { router, controller,middleware } = app;
router.get('/', middleware.logmidd,controller.home.index);
ctx.seesion.loomidd
15.Egg.js的Extend-application
15.Egg.js的Extend-application Egg虽然给我们提供了很多内置的方法,但有时候还是感觉不够用,这时候就需要我们自己对Egg中的方法进行扩展和编写了。
多种对象进行扩展
Egg.js可以对内部的五种对象进行扩展,我也作了一个表格,给出了可扩展的对象、说明、this指向和使用方式。
Egg.js丰富的扩展方式说明
this 指向
使用方式
application全局应用对象
app对象
this.app context请求上下文ctx对象
this.ctx request请求级别的对象,提供了请求相关的属性和方法
ctx.request对象this.ctx.request response请求级别的对象,提供了相应相关的属性和方法
ctx.response对象this.ctx.response helper帮助函数
ctx.helper对象this.ctx.helper
不需要配置
路径名字一样的
控制器
async index() {
const { ctx ,app} = this;
// ctx.body = 'hi, egg';
ctx.cookies.set('name', 'koo',{maxAge:10000,httpOnly:false,encrypt:true});
ctx.cookies.get('name', {encrypt:true});
console.log(app.currentTime(),5555555)
await ctx.render('index.html',{name:'koo'});
}
extend/application.js
module.exports={
//extends fum
currentTime(){
return new Date().getTime();
}
}
16.Egg.js的Extend-context
17.Egg.js的Extend-request
18.Egg.js的Extend-response和helper
19.定时任务的编写
app >schedule> Js get_time.js
写日志 定时等等 安规范命名 自动加载
cron 定时任务格式
备份数据库...
const { Subscription } = require('egg');
class GetTime extends Subscription {
static get schedule() {
return {
cron: '0 0 0 * * *', // 每天0点0分0秒执行一次
interval: '1s', // 1m 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
};
}
async subscribe() {
console.log('定时任务执行了');
// 获取当前时间
// const currentTime = this.ctx.helper.currentTime()
// 获取当前时间
// const currentTime2 = this.ctx.helper.currentTime()
}
}
module.exports = GetTime;
//app >schedule> Js get_time.js
20.Egg.js配置连接MySql数据库
egg-mysql plugins.js配置
config.default config.mysql+++ 配置地址密码...
操作数据库 要 try 死锁,...
app.mysql.select('xx') 服务操作
21.Egg.js操作MySql数据库-1(查询)
22.Egg.js操作MySql数据库-2(增、改、删)
简化操作sql egg-mysql 不是orm