创建egg项目
npm i egg-init -g
egg-init egg-demo --type=simple
egg-mysql传参
get:this.ctx.query
post : this.ctx.request.body
动态路由:this.ctx.params
前台组件内部发请求传参的时候不能直接传[] 数组,只能传字符串格式,
JSON.parse([])
,不然或报错。是个坑🕳
MVC框架
M:数据层 Model
V:视图 View
C:控制 Controller
跟express对比
MVC
资源充分利用 多核多线程 | express 1核
进程:4个
目录结构
app 源码 入口
Controller 控制层 不做逻辑 控制view和数据
public 静态资源
service 数据库操作 增删改查
router.js 路由配置
config 配置
egg简单流程
1.数据库配置
config/config.default.js
config.mysql = {
// 单数据库信息配置
client: {
// host
host: 'localhost',
// 端口号
port: '3306',
// 用户名
user: 'root',
// 密码
password: 'root',
// 数据库名
database: 'muen',
},
// 是否加载到 app 上,默认开启
app: true,
// 是否加载到 agent 上,默认关闭
agent: false,
};
2.config/plugin.js
module.exports = {
mysql : {
enable: true,
package: 'egg-mysql',
}
};
3.controller控制层 a.js
const Controller = require('egg').Controller;
class A extends Controller{
//可能用到异步操作
async index(){
const { ctx } = this;//ctx类似封装的req,res
// *如果连接数据库 传参去service操作数据库逻辑
// *ctx.service.a.index(传参数)
ctx.body=[1,2,3]//这是直接返回的值 连接数据库的话可以不用写
}
}
module.exports=A
4.service 数据逻辑 a.js
const Service = require('egg').Service;
calss A extends Controller{
async index(接收参数){
const { app } = this;
await app.mysql.insert('数据表名',参数/object)
}
// get/select('表名') 获取1条或多条数据
// get('posts', { id: 12 })
// select('posts')
// insert 添加
// const result = app.mysql.update({数据})
// const foo = result.affectedRows === 1; 判断更新成功
// delete('',{id:123})
}
egg总结
1.简介
重量级 后端
js写作
阿里开发
2.安装
1.下载包 npm i egg-init -g
2.egg-init egg-demo --type=simple
3.cd egg-demo && npm i
3.目录
controller 控制层 返回页面 ctx.body="123"
service 数据>mysql(数据库)
public 静态 1.png http://localhost:7001/public/1.png
router.js 路由管理
view 测试接口 视图层 ejs模板引擎 <%%>
4.参数
get: ?name=dxw&age=18 | 动态路由 :id
post: 传参 有坑 egg安全策略限制 必须传特定的参数 (暂时解决方法就是关闭安全策略)
// config/config.default.js
const config = exports = {
security: {//关闭安全策略
csrf: {
enable: false,
},
}
};
get接收的参数 query获取 this.ctx.query
5.参数校验:
//config/plugin.js
module.exports = {
mysql: {//mysql数据库
enable: true,
package: 'egg-mysql',
},
validate:{//参数校验
enable:true,
package:'egg-validate'
}
};
下载 egg-validate
依赖 , 在Controller层内的逻辑里添加 try catch
const Controller = require('egg').Controller;
class Updata extends Controller {
updata() {
const { ctx } = this;
console.log(ctx.request.body)
try {//参数效验 传过来的值必须是number
ctx.validate({ id: 'number' })
} catch (e) {
ctx.body = {
code: 0,
msg: e
}
return
//不是number 就停止 不走下方 返回错误信息
}
ctx.service.updata.updata(ctx.request.body);
ctx.body = {
code: 1,
msg: '更新成功'
}
}
}
module.exports = Updata;
![](https://img.haomeiwen.com/i7883821/87bba630c79107ab.png)
当前我传过来的id是字符串
形式
效验的id是number
不匹配,就会返回错误信息 "should be a number"
![](https://img.haomeiwen.com/i7883821/c44626778db3d74a.png)
上述的return
关键字就会阻止 下方的成功返回信息 和 传到Service层的方法
参数效验 : egg-validate 完。
6.路由重定向
router.redirect('/','/public/aa.html',302) // 加一个状态码
网友评论