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 //快速生成configegg 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/***
egg.js 使用笔记相关推荐
- egg.js学习笔记
文章目录 安装egg 目录结构 路由相关 1. get传值 2. 4种配置方法 重定向 1. ctx 2. 路由重定向 3.路由分组 控制器 自定义 Controller 基类 模板引擎 1. 安装和 ...
- uniapp+egg.js+react实现全栈笔记App
软件介绍 这是一个笔记App,主要使用的技术是uniapp+egg.js+react 软件预览图片: 首页: 编辑页面.png 编辑和登录页面 编辑页面2.png 项目地址: https://gith ...
- 【笔记-node】《Egg.js框架入门与实战》、《用 React+React Hook+Egg 造轮子 全栈开发旅游电商应用》
20210226-20210227:<Egg.js框架入门与实战> 课程地址:https://www.imooc.com/learn/1185 第一章 课程导学 01-01 课程介绍 一. ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计
转载需经本人同意且标注本文原始地址:https://zhaomenghuan.github.io/blog/nodejs-eggjs-usersytem.html 前言 近来公司需要构建一套 EMM( ...
- React+Egg.js实现全栈个人博客
React+Egg.js实现全栈个人博客 这是一个个人博客软件,前台和后台使用的都是React,后端使用egg.js,地址 前台 文章列表 1.png 文章详情 2.png 后台管理系统 添加文章 3 ...
- 我开发了一个基于 Egg.js 的后端脚手架
背景 之前基于 Egg.js 开发了几个项目,发现每个项目中都有配置文件.数据库连接操作.数据模型定义.微信登陆授权处理等功能,而做新项目时总会复制之前的项目来删删改改,有时候在 A 项目中添加了一个 ...
- 基于 Egg.js 框架的 Node.js 服务构建之用户管理设计 1
前言 近来公司需要构建一套 EMM(Enterprise Mobility Management)的管理平台,就这种面向企业的应用管理本身需要考虑的需求是十分复杂的,技术层面管理端和服务端构建是架构核 ...
- ArcGIS JS 学习笔记4 实现地图联动
原文:ArcGIS JS 学习笔记4 实现地图联动 1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而 ...
- egg.js连接mysql数据库遇到的问题
最近在策划写一个博客采用前后端分离模式,前端使用vue后端使用egg.js,我也是刚开始学习egg.js,所以会将自己踩的坑都记录下来. 首先介绍下后端为什么采用egg.js吧,之前我是学习了koa2 ...
最新文章
- Gitlab备份与恢复[七]
- 只要用心就可以看见 十个幸福瞬间照片
- (jquery插件)打造百分比动态色彩条
- android四大组件之Service 注册广播接收者
- Python暴力破解凯撒加密的文本
- VMware虚拟机中不识别移动硬盘
- 红帽急了:新年的 RHEL 将有低成本或免费版
- 马云电脑水平曝光;快狗打车回应裁员50% ;华为邀请开发者加入应用商店 | 极客头条...
- 面试 其实就是短时间内展现出你最好的自我
- Python使用scrapy框架编写自动爬虫爬取京东商品信息并写入数据库
- GPIO设备虚拟文件结点的创建【转】
- Educational Codeforces Round 51 (Rated for Div. 2).B. Relatively Prime Pairs(水题)
- itools备份短信到android,【itools备份文件路径】itools备份路径_itools备份短信-系统城...
- 为什么说运维的未来必然是 AIOps?
- 如何重装java tm_彻底重装JDK的方法
- 数据库:数据查询(指定的列、全部列、经过计算的值、消除重复的行、查询满足条件的元组、比较查询、范围查询、集合查询、字符匹配查询)
- 关系模式判断候候选关键字 与 函数依赖无损连接
- 那些让面试官直呼内行的Java知识点(一)
- Springboot AOP注解方式获取请求参数及返回值并发送至rabbitMQ
- ubuntu如何设置默认程序打开方式