返回

使用egg.js快速搭建增删改查数据库应用

前端

利用 egg.js ORM 构建高效的数据库应用

在现代 Web 开发中,快速、高效地处理数据库操作至关重要。egg.js 是一款流行的 Node.js 框架,它提供了一系列有用的特性,包括集成的对象关系映射器 (ORM),简化了与数据库的交互。本文将深入探讨如何使用 egg.js 的 ORM 功能构建一个功能齐全的数据库应用。

搭设你的 egg.js 项目

要使用 egg.js 的 ORM,首先需要安装 egg-bin 脚手架工具,它将帮助你创建新的 egg.js 项目。接下来,创建一个名为 my-egg-app 的新项目:

npm install -g egg-bin
egg-bin init my-egg-app

进入项目目录并安装依赖项:

cd my-egg-app
npm install

配置数据库连接

接下来,你需要配置与数据库的连接。在 config/config.default.js 文件中,配置你的数据库凭据。本文将使用 MySQL 作为示例:

module.exports = {
  sequelize: {
    dialect: 'mysql',
    host: 'localhost',
    port: 3306,
    database: 'my_egg_app',
    username: 'root',
    password: 'password',
  },
};

定义数据模型

数据模型定义了数据库中数据的结构和关系。在 egg.js 中,你可以使用 Model 类来定义模型。在 app/model/user.js 文件中,定义一个名为 User 的模型:

const { Model } = require('egg');

class User extends Model {
  static get tableName() {
    return 'users';
  }

  static init(sequelize, DataTypes) {
    return super.init({
      id: {
        type: DataTypes.INTEGER,
        primaryKey: true,
        autoIncrement: true,
      },
      username: {
        type: DataTypes.STRING(255),
        allowNull: false,
        unique: true,
      },
      password: {
        type: DataTypes.STRING(255),
        allowNull: false,
      },
      email: {
        type: DataTypes.STRING(255),
        allowNull: false,
        unique: true,
      },
      created_at: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
      },
      updated_at: {
        type: DataTypes.DATE,
        allowNull: false,
        defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
      },
    }, {
      sequelize,
      modelName: 'User',
      timestamps: false,
    });
  }
}

module.exports = User;

增删改查操作

egg.js 的 ORM 提供了方便的方法来执行增删改查操作。

增加数据

使用 create() 方法添加新记录:

// app/controller/user.js

const User = require('../model/user');

class UserController extends Controller {
  async create() {
    const user = await User.create({
      username: 'admin',
      password: '123456',
      email: 'admin@example.com',
    });

    this.ctx.body = {
      code: 0,
      data: user,
    };
  }
}

module.exports = UserController;

查询数据

使用 findAll() 方法检索所有记录:

// app/controller/user.js

const User = require('../model/user');

class UserController extends Controller {
  async find() {
    const users = await User.findAll();

    this.ctx.body = {
      code: 0,
      data: users,
    };
  }
}

module.exports = UserController;

更新数据

使用 update() 方法更新记录:

// app/controller/user.js

const User = require('../model/user');

class UserController extends Controller {
  async update() {
    const user = await User.update({
      username: 'new_username',
    }, {
      where: {
        id: 1,
      },
    });

    this.ctx.body = {
      code: 0,
      data: user,
    };
  }
}

module.exports = UserController;

删除数据

使用 destroy() 方法删除记录:

// app/controller/user.js

const User = require('../model/user');

class UserController extends Controller {
  async destroy() {
    const user = await User.destroy({
      where: {
        id: 1,
      },
    });

    this.ctx.body = {
      code: 0,
      data: user,
    };
  }
}

module.exports = UserController;

运行应用

运行 egg.js 应用:

npm run dev

然后,访问 http://localhost:7001 查看你的应用。

结论

egg.js 的 ORM 功能提供了强大的工具集,用于管理数据库交互。通过将 Model 类与增删改查方法相结合,你可以轻松创建和维护复杂的数据模型。本文概述了基本操作,通过实践,你将能够熟练地使用 egg.js 的 ORM,构建高效且可扩展的数据库驱动的应用。

常见问题解答

1. ** egg.js 的 ORM 支持哪些数据库?**

  • egg.js 的 ORM 支持 MySQL、PostgreSQL 和 MongoDB 等主流数据库。

2. 如何在 ** egg.js 中定义数据关系?**

  • 你可以使用 belongsTo()hasMany()belongsToMany() 方法来定义数据模型之间的关系。

3. 如何进行复杂的查询,例如联合或子查询?

  • egg.js 的 ORM 支持 Sequelize 的查询构建器,它允许你执行复杂查询。

4. ** egg.js 的 ORM 是否支持事务?**

  • 是的,egg.js 的 ORM 支持事务,使你能够在原子操作中执行多个数据库操作。

5. 如何在 ** egg.js 中使用 ORM 钩子?**

  • ORM 钩子允许你在执行特定操作时触发自定义函数,例如在创建或更新记录之前或之后。