当前位置: 首页 > article >正文

AdminJS - 集成 MySQL 的现代化管理面板开发指南

AdminJS - 集成 MySQL 的现代化管理面板开发指南

MySQL 集成配置

首先需要安装必要的依赖:

npm install adminjs @adminjs/express express
npm install @adminjs/sequelize sequelize mysql2

基础配置示例

const AdminJS = require('adminjs')
const AdminJSExpress = require('@adminjs/express')
const AdminJSSequelize = require('@adminjs/sequelize')
const { Sequelize } = require('sequelize')

// 注册 Sequelize 适配器
AdminJS.registerAdapter(AdminJSSequelize)

// 配置数据库连接
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
  port: 3306
})

// 定义模型示例
const User = sequelize.define('User', {
  name: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  email: {
    type: Sequelize.STRING,
    allowNull: false,
  },
  status: {
    type: Sequelize.ENUM(['active', 'inactive']),
    defaultValue: 'active',
  }
})

// AdminJS 配置
const adminJs = new AdminJS({
  databases: [sequelize],
  rootPath: '/admin',
  resources: [{
    resource: User,
    options: {
      // 自定义属性显示
      properties: {
        createdAt: {
          isVisible: { list: true, filter: true, show: true, edit: false }
        }
      },
      // 自定义操作
      actions: {
        // 可以添加自定义操作
      }
    }
  }]
})

高级配置示例

// 添加自定义验证和格式化
const adminJsConfig = {
  resources: [{
    resource: User,
    options: {
      properties: {
        email: {
          isRequired: true,
          // 添加自定义验证
          custom: {
            isEmail: true
          }
        },
        status: {
          availableValues: [
            { value: 'active', label: '活跃' },
            { value: 'inactive', label: '停用' }
          ]
        }
      },
      // 自定义列表显示
      listProperties: ['id', 'name', 'email', 'status', 'createdAt'],
      // 自定义过滤选项
      filterProperties: ['name', 'email', 'status', 'createdAt'],
      // 自定义编辑字段
      editProperties: ['name', 'email', 'status']
    }
  }]
}

常用操作示例

1. 查询数据

// 自定义列表操作
const customListAction = {
  actionType: 'list',
  handler: async (request, response, context) => {
    const users = await User.findAll({
      where: {
        status: 'active'
      }
    });
    return {
      records: users
    }
  }
}

2. 数据验证

// 添加自定义验证规则
const userValidation = {
  before: async (request, context) => {
    const { email } = request.payload;
    const existingUser = await User.findOne({ where: { email } });
    if (existingUser) {
      throw new Error('邮箱已存在');
    }
    return request;
  }
}

实用功能

  1. 批量操作

    • 支持批量删除
    • 支持批量更新状态
    • 自定义批量操作
  2. 数据导出

    • CSV 导出
    • Excel 导出
    • 自定义导出格式
  3. 文件上传

    • 图片上传
    • 文件管理
    • 支持多种存储方式

性能优化建议

  1. 合理使用索引
  2. 配置连接池
  3. 使用适当的查询缓存
  4. 分页加载数据

安全建议

const adminJsOptions = {
  // 配置认证
  authenticate: async (email, password) => {
    // 实现您的认证逻辑
    const user = await User.findOne({ where: { email } });
    if (user && validatePassword(password, user.password)) {
      return user;
    }
    return false;
  },
  // 配置权限
  cookiePassword: 'your-secure-password-here'
}

总结

通过 AdminJS 和 MySQL 的集成,我们可以快速构建一个功能完整的管理后台系统。它不仅提供了基础的 CRUD 操作,还支持复杂的业务逻辑实现和界面定制,是开发管理系统的理想选择。


http://www.kler.cn/a/446989.html

相关文章:

  • 什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap
  • 3D工具显微镜的测量范围
  • CUDA编程 | 6.2 并发内核执行
  • springmvc的拦截器,全局异常处理和文件上传
  • Moretl开箱即用日志采集
  • 数据压缩比 38.65%,TDengine 重塑 3H1 的存储与性能
  • CSS3 实现火焰-小火苗效果
  • linux中大内核锁、互斥锁、信号量、完成变量、自旋锁区别
  • 【AIGC-ChatGPT进阶提示词-《动图生成》】怪物工厂:融合想象力与创造力的奇幻世界
  • vscode 使用说明
  • 四川托普信息技术职业学院教案1
  • 智能挂号系统设计典范:SSM 结合 Vue 在医院的应用实现
  • Windows下安装Rabbit MQ
  • 【线性代数】理解矩阵乘法的意义(点乘)
  • 安装Mac软件遇到问题常见报错
  • 机器学习-逻辑回归和softmax回归
  • go语言zero框架中启动脚本.sh的编写与配置
  • go语言 爬虫 钉钉群机器人
  • 玩游戏没有flash插件的解决方案(No Flash)
  • 【RAII | 设计模式】C++智能指针,内存管理与设计模式
  • 音视频入门基础:MPEG2-TS专题(21)——FFmpeg源码中,获取TS流的视频信息的实现
  • python学习笔记—9—复习
  • 详细介绍如何使用rapidjson读取json文件
  • 《向量数据库指南》——RAG破局,大模型新纪元!
  • EasyGBS国标GB28181平台P2P远程访问故障排查指南:客户端角度的排查思路
  • 半导体数据分析(二):徒手玩转STDF格式文件 -- 码农切入半导体系列