Egg.js 为企业级框架和应用而生。使用 MVC 架构模型指导开发,使得开发大型 Web 应用变得简单且易于维护。
特性
自动初始化
1、使用官方提供的脚手架(项目模板),来初始化一个空的 Egg 项目。
# 创建一个空目录,如果使用终端创建空目录就是如下的命令mkdir api-egg# 进入到空目录cd api-egg# 使用 egg-init 进行初始化npm init egg --type=simple# 安装依赖npm i
手动初始化
# 创建一个空目录,如果使用终端创建空目录就是如下的命令mkdir api-egg# 进入到空目录cd api-egg# 初始化成 node 项目,并安装 egg 开发相关的依赖npm init -ynpm i egg-bin -Dnpm i egg -S
创建一个处理请求的控制器
在项目根目录下,创建 app/controller/home.js,添加如下内容:
const { Controller } = require("egg");class HomeController extends Controller {/*** 欢迎页*/async index() {this.ctx.body = "Hi, egg ~";}}module.exports = HomeController;
配置路由
意义:我们要把控制器方法映射给一个路径,当客户端访问这个路径时,就执行对应的控制器方法。
步骤:项目根目录下,新建 app/router.js 文件,加入如下代码:
module.exports = (app) => {const { controller, router } = app;// 定义根路由router.get("/", controller.home.index);};
配置应用加密秘钥
意义:主要用于加密我们应用中的 cookie。
步骤:项目根目录下,新建 config/config.default.js 文件,导出一个配置对象:
module.exports = {keys: "hahahahahahha",};
配置项目启动命令
步骤:在项目根目录下 package.json 文件中,加入如下脚本命令:
"scripts": {"dev": "egg-bin dev"},
启动项目
npm run dev
打开浏览器,访问:http://localhost:7001 即可看到 “Hi, egg ~”。
集成 MySQL
Egg 框架提供插件机制,可以通过插件集成其他应用程序。
安装 MySQL 插件依赖
npm i egg-mysql -S
创建 MySQL 服务器的连接配置
步骤:在 config/config.default.js 文件中,加入 MySQL 连接配置:
module.exports = {keys: "hahahha",mysql: {client: {host: "localhost",port: 3306,user: "root",password: "root",database: "blog",},},};
启动 MySQL 插件
步骤:在项目根目录下,新建 config/plugin.js 文件,加入如下代码:
module.exports = {mysql: {enable: true,package: "egg-mysql",},};
创建一个用户 service 用于处理 MySQL 查询
步骤:在项目根目录下,新建 app/service/user.js 文件:
const { Service } = require("egg");class UserService extends Service {/*** 根据用户名,查询该用户信息* @param {string} username 用户名*/async findByUsername(username) {let sql = "select * from user where username = ?";let params = [username];let res = await this.app.mysql.query(sql, params);return res[0];}}module.exports = UserService;
关闭 CSRF 校验
如果我们使用 Egg 开发多页面应用,就会涉及到 CSRF(跨站请求伪造)攻击。
因为我们开发的是数据接口服务,不涉及到页面展示,所以不需要这一安全防范,关闭即可。
该功能是 egg-security 插件提供的,我们只需要将其关闭即可。
在 config/config.default.js 文件中,关闭:
module.exports = {// ...security: {csrf: false,},};
