eggjs框架及demo环境搭建

前言:学习nodejs作为服务端的eggjs,成本还是不小的,把很久以前的东西重新捡回来的感觉。要记忆大量的知识点。

 

 

学习egg.js,看这一篇就够了!

https://juejin.cn/post/6995063516470198279

文章包含如何添加中间件middleware、集成MySQL和MongoDB。

 

官方文档:

https://www.eggjs.org/zh-CN/tutorials/mysql  内容更完整。

https://eggjs.github.io/zh/guide/

文档不适合短时间看完,知识点平铺直叙,没法让你快速进入状态。所以适合实际用到的时候回来查询。

 

 

eggjs连接数据库

我自己亲测的版本是:https://www.cnblogs.com/zccst/p/17515047.html

 

下面的版本供参考

1,先安装插件,并开启

npm i egg-mysql

config/plugin.js 中开启插件:

exports.mysql = {
  enable: true,
  package: 'egg-mysql',
}

2,在 config/config.default.js 中定义连接参数:

config.mysql = {
  client: {
    host: 'localhost',
    port: '3306',
    user: 'root',
    password: 'root',
    database: 'cms',
  }
}

3,集成

方式1:
在 Controller 或 Service 的 app.mysql 中获取到 mysql 对象,例如:
class UserService extends Service {
  async find(uid) {
    const user = await this.app.mysql.get('users', { id: 11 });
    return { user }
  }
}

方式2:使用当前最流行的ORM框架sequelize

更好的集成 MySQL 的方式是借助 ORM 框架来帮助我们管理数据层的代码,sequelize 是当前最流行的 ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多个数据源,接下来我们使用 sequelize 来连接 MySQL 数据库,首先安装依赖:

npm install egg-sequelize mysql2 --save 
yarn add egg-sequelize mysql2

然后在 config/plugin.js 中开启 egg-sequelize 插件:

exports.sequelize = {
  enable: true,
  package: 'egg-sequelize',
}

同样要在 config/config.default.js 中编写 sequelize 配置

config.sequelize = {
  dialect: 'mysql',
  host: '127.0.0.1',
  port: 3306,
  database: 'example',
  username: 'root',
  password: '123456',
} 

然后在 egg_example 库中创建 books 表:

CREATE TABLE `books` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'primary key',
  `name` varchar(30) DEFAULT NULL COMMENT 'book name',
  `created_at` datetime DEFAULT NULL COMMENT 'created time',
  `updated_at` datetime DEFAULT NULL COMMENT 'updated time',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='book';

Sequelize 操作Mysql实现增删改查

  (1)创建 model/book.js 文件,代码是:

module.exports = app => {
  const { STRING, INTEGER } = app.Sequelize
  const Book = app.model.define('book', {
    id: { type: INTEGER, primaryKey: true, autoIncrement: true },
    name: STRING(30),
  })
  return Book
}

  (2)添加 controller/book.js 控制器:(或在Service中)

const Controller = require('egg').Controller

class BookController extends Controller {
  async index() {
    const ctx = this.ctx
    ctx.body = await ctx.model.Book.findAll({})
  }

  async show() {
    const ctx = this.ctx
    ctx.body = await ctx.model.Book.findByPk(+ctx.params.id)
  }

  async create() {
    const ctx = this.ctx
    ctx.body = await ctx.model.Book.create(ctx.request.body)
  }

  async update() {
    const ctx = this.ctx
    const book = await ctx.model.Book.findByPk(+ctx.params.id)
    if (!book) return (ctx.status = 404)
    await book.update(ctx.request.body)
    ctx.body = book
  }

  async destroy() {
    const ctx = this.ctx
    const book = await ctx.model.Book.findByPk(+ctx.params.id)
    if (!book) return (ctx.status = 404)
    await book.destroy()
    ctx.body = book
  }
}

module.exports = BookController

最后配置 RESTful 路由映射:

module.exports = app => {
  const {router, controller} = app
  router.resources('books', '/books', controller.book)
}
 参考文档:

 

 

 

 

踩过的坑:

这个站点不靠谱:https://github.com/eggjs/egg-ant-design-pro

 

posted @ 2023-06-27 08:49  走走停停走走  Views(157)  Comments(0Edit  收藏  举报