egg.js 使用笔记

脚手架安装

1、安装

$ npm i egg-init -g
$ egg-init egg-example --type=simple   //egg提供的一款名为simple的模板
$ cd egg-example
$ npm i    //安装依赖

2、项目目录的讲解
在这里插入图片描述在这里插入图片描述

1、middleware 中间件定位是拦截用户的请求,如鉴权,安全检查,访问日志等;
2、extend 防止扩展文件,作用在于将一些常用的动作抽离在js文件内的一个独立的function ,可用js处理一些复杂的逻辑。
3、schedule 防止定时任务文件,如定时从远程api更新本地缓存,定时进行文件删除;

3、启动项目

//启动项目的命令
1、cnpm run start  //用于实际项目
2、cnpm run dev   //用于开发

npm run dev

然后浏览器打开http://localhost:7001 就可以看到 “hellow,egg” 字样说明运行成功。

 "scripts": {
    "dev": "egg-bin dev  --host 192.168.6.58",    // egg 使用ip访问
  }

Config

运行环境配置

//config/config.{env}.js
--env = {env}

在这里插入图片描述
在这里插入图片描述

Extend

// app/extend/response.js
module.exports = {
  set foo(value) {
    this.set('x-response-foo', value);
  },
};


this.response.body= 'bar';  => this.body= 'bar';   =>   this.response.foo = 'bar';  

模板引擎

ejs官方网站

npm install egg-view-ejs -s

数据库(egg-mysql)

1、get 查找一条

let result = await this.app.mysql.get("user",{id:1})

2、查找数据的另一种方式

let result = await this.app.mysql.select("user",{
where:{id:1}
})

3、增加数据

let result = await this.app.mysql.insert("user",{username:"lisi",password:"1234"})

4、修改数据的第一种方式:根据主键修改

let result = await this.app.mysql.update('user',{ id:2, username:'赵四' });

//修改数据的第二种方式:通过 sql 来修改数据

let results=await this.app.mysql.query('update user set username = ? where id = ?',["王五",2]);

5、删除数据

let result= await this.app.mysql.delete('user',{ id:3 });

6、执行 sql

this.app.mysql.query(sql,values);

7、mysql 事务

const conn=await this.app.mysql.beginTransaction();
try{
    await conn.insert('user',{'username':'xiao1','password':'1111'});
    await conn.update('user',{id:2,username:'黑子'});
    await conn.commit();  //提交事务
}catch(err){
    await conn.rollback();//回滚事务
    throw err;
}

VS插件

安装eggjs插件

egg controller    //快速生成controller  

egg service    //快速生成service 

egg config    //快速生成config

egg plugin    //快速生成plugin 

问题解决

1. 安全威胁csrf的防范

报错信息:

invalid csrf token. See https://eggjs.org/zh-cn/core/security.html#安全威胁csrf的防范
nodejs.ForbiddenError: invalid csrf token [
解决方案:

  在 config/config.default.js 中新增
  // 框架的安全插件是默认开启的,如果我们想关闭其中一些安全防范,直接设置该项的 enable 属性为 false 即可
 config.security = {
    csrf: {
      enable: false,
    },
  };

基础编写

1、静态资源(images,css,js等文件)放到app/public 目录即可;
2、模板渲染:
绝大多数情况,我们都需要读取数据后渲染模板,然后呈现给用户。故我们需要引入对应的模板引擎。
1). 先安装对应的插件 egg-view-nunjucks :

$ npm i egg-view-nunjucks --save

2). 开启插件:

// config/plugin.js
exports.nunjucks = {
  enable: true,
  package: 'egg-view-nunjucks'
};
// config/config.default.js
// 添加 view 配置
exports.view = {
  defaultViewEngine: 'nunjucks',
  mapping: {
    '.tpl': 'nunjucks',
  },
};

这里写图片描述

这里写图片描述

基础语法

1、controller 中指向页面:

yield this.ctx.render(‘news/list.tpl’,datalist);

这里写图片描述

2、页面中循环:
  <ul>
    {% for item in list %}
    <li>
      <a href="{{item.url}}">{{item.title}}</a>
    </li>
    {% endfor %}
  </ul>

这里写图片描述

3、控制器中获取动态路由:

1). router.js 中配置路由

  router.get('/list/:id', controller.list.checkId);

这里写图片描述

2). controller 中获取路由参数

  * checkId(){
     const {ctx} = this;
     ctx.body = `"您输入的是:"+${ctx.params.id}`;
  }

这里写图片描述

浏览器:
这里写图片描述

4、控制器中传参给页面:

1). 控制器中定义参数的值

这里写图片描述

2). 页面获取参数
这里写图片描述

浏览器中:
这里写图片描述

5、自定义工具类及其引用方法:

1). 在 app目录下新建一个util的文件夹,这里用来放置公用类
这里写图片描述

2). 在 helper.js 中定义
这里写图片描述

3). 在controller 中的js文件里使用
这里写图片描述

浏览器:
这里写图片描述

6、获取路由中的参数
const { ctx } =  this;
console.log(ctx.query)  // 获取  ?id=123&name=***
console.log(ctx.params)  // 获取  /123/***
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值