
后端【免费下载链接】mikro-ormTypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases.项目地址https://gitcode.com/gh_mirrors/mi/mikro-orm点击查看免费下载导读AdminJS 是一款自动生成后台管理界面的开源工具它通过适配器Adapter机制将数据库实体直接映射为可增删改查CRUD的 Web 管理面板。本文基于当前仓库 version-7.2 版本文档 编写完整讲解如何在 MikroORM 项目中接入 AdminJS从依赖安装、Express/Hapi 两种主流框架的初始化与路由挂载到为后台面板添加用户认证全程提供可直接复制运行的 TypeScript 示例。读完本文你将掌握用一条MikroORM.init()初始化即让全部实体自动出现在 AdminJS 侧边栏、并安全暴露给运营人员的完整方案。适用前提本文示例基于当前仓库 v7 版本的mikro-orm/core与各数据库驱动包以及adminjs/mikroorm适配器MikroORM.init()的用法与当前仓库 packages/core/src/MikroORM.ts 中的实现保持一致。一、为什么需要 AdminJS 适配器MikroORM 是构建在 Data Mapper、Unit of Work 与 Identity Map 模式之上的 TypeScript ORM负责实体发现、元数据构建、EntityManager 管理和数据库连接。AdminJS 本身并不了解 MikroORM 的实体元数据二者之间需要一层“桥接”Database 类由adminjs/mikroorm提供负责接收一个已初始化的MikroORM实例读取其中的实体元数据Resource 类将单个实体如User、Car、Seller包装成 AdminJS 可操作的资源对象从而在面板中自动生成列表、详情、新建、编辑、删除等页面。因此接入流程的本质是先正常初始化 MikroORM再把 ORM 实例注册给 AdminJS最后把 AdminJS 的路由挂到你的 Web 服务器上。二、安装依赖按官方文档共分三步安装。1. AdminJS 核心包$ yarn add adminjs2. MikroORM 适配器与驱动$ yarn add adminjs/mikroorm # 根据你的数据库选择对应的 MikroORM 驱动与核心包 $ yarn add mikro-orm/core mikro-orm/mongodb # for mongo $ yarn add mikro-orm/core mikro-orm/mysql # for mysql $ yarn add mikro-orm/core mikro-orm/mariadb # for mariadb $ yarn add mikro-orm/core mikro-orm/postgresql # for postgresql $ yarn add mikro-orm/core mikro-orm/sqlite # for sqlite提示当前仓库packages/目录下即包含 core、mongodb、mysql、mariadb、postgresql、sqlite、libsql、mssql、oracledb 等驱动包的源码安装的正是这些包。若使用 npm将yarn add替换为npm install即可。3. 服务器框架插件Express$ yarn add adminjs/express # Peer dependencies $ yarn add express express-formidable express-sessionHapi$ yarn add adminjs/hapi # Peer dependencies $ yarn add hapi/boom hapi/cookie hapi/hapi hapi/inert三、基础初始化MikroORM ExpressExpress 是最常见的挂载方式。完整示例import AdminJS from adminjs; import { Database, Resource } from adminjs/mikroorm; import AdminJSExpress from adminjs/express; import { MikroORM } from mikro-orm/postgresql; import { validate } from class-validator; // optional const PORT process.env.PORT ?? 3000; const run async () { /* 像平时一样初始化 MikroORM也可以从独立文件导入已创建的 ORM 实例 */ const orm await MikroORM.init({ entities: [User, Car, Seller], // 换成你自己的实体 dbName: process.env.DATABASE_NAME, clientUrl: process.env.DATABASE_URL, }); /* 可选如果使用 class-validator将其赋值给 Resource */ Resource.validate validate; /* 告诉 AdminJS 使用哪个适配器 */ AdminJS.registerAdapter({ Database, Resource }); const app express(); /* 创建 AdminJS 实例 */ const admin new AdminJS({ databases: [orm], }); const router AdminJSExpress.buildRouter(admin); app.use(admin.options.rootPath, router); app.listen(PORT, () { console.log(App listening at http://localhost:${PORT}); }); } run();关键点拆解MikroORM.init()的职责从当前仓库 packages/core/src/MikroORM.ts 的源码可以看到init会加载可选依赖、执行元数据发现MetadataDiscovery、创建全局EntityManager最终返回可用的 ORM 实例。传入的entities数组正是元数据发现的入口AdminJS 会基于这些被发现的实体生成后台资源。连接参数dbName指定数据库名clientUrl提供完整的连接串会覆盖单独的主机/端口/用户名等配置。当前仓库 packages/core/src/utils/Configuration.ts 中ConnectionOptions还支持host、port、user、password、pool等字段生产环境建议把数据库凭据放到环境变量中避免硬编码。适配器注册AdminJS.registerAdapter({ Database, Resource })必须在创建AdminJS实例之前完成否则 AdminJS 无法识别传入的 ORM 实例。路由挂载admin.options.rootPath默认是/admin通过app.use将 AdminJS 路由挂到 Express 应用上。启动后访问http://localhost:3000/admin侧边栏会列出User、Car、Seller等全部实体即可对它们执行基础的CRUD操作。四、基础初始化MikroORM HapiHapi 的接入思路相同只是把“构建路由”换成了“注册插件”import AdminJS from adminjs; import { Database, Resource } from adminjs/mikroorm; import AdminJSHapi from adminjs/hapi; import { MikroORM } from mikro-orm/postgresql; import { validate } from class-validator; // optional const PORT process.env.PORT ?? 3000; const run async () { /* 像平时一样初始化 MikroORM也可以从独立文件导入已创建的 ORM 实例 */ const orm await MikroORM.init({ entities: [User, Car, Seller], // 换成你自己的实体 dbName: process.env.DATABASE_NAME, clientUrl: process.env.DATABASE_URL, }); /* 可选如果使用 class-validator将其赋值给 Resource */ Resource.validate validate; /* 告诉 AdminJS 使用哪个适配器 */ AdminJS.registerAdapter({ Database, Resource }); const server Hapi.server({ port: PORT }) /* 配置 AdminJS */ const adminOptions { databases: [orm], }; /* 将 AdminJS 注册为 Hapi 服务器的插件 */ await server.register({ plugin: AdminJSHapi, options: adminOptions, }); await server.start(); console.log(App listening at ${server.info.uri}); } run();Hapi 与 Express 的主要差异环节ExpressHapi接入方式AdminJSExpress.buildRouter(admin)构建 Routerserver.register({ plugin: AdminJSHapi, options: adminOptions })注册插件AdminJS 配置new AdminJS({ databases: [orm] })放入options传给插件路由挂载app.use(admin.options.rootPath, router)由插件内部自动处理启动后管理面板同样位于http://localhost:{PORT}/admin侧边栏展示全部实体并支持 CRUD。五、为管理面板添加认证默认配置下 AdminJS 是无认证的任何人访问/admin都能管理数据这在生产环境是危险的。文档给出了两种框架的认证改造方案。Express改用 buildAuthenticatedRouter把原来的AdminJSExpress.buildRouter(admin)替换为AdminJSExpress.buildAuthenticatedRouter并传入认证回调与 cookie 加密口令Beforeconst router AdminJSExpress.buildRouter(admin);Afterconst ADMIN_EMAIL exampletest.com; const ADMIN_PASSWORD password; const router AdminJSExpress.buildAuthenticatedRouter(admin, { authenticate: async (email, password) { /* 在这里编写校验邮箱与密码的逻辑 */ return email ADMIN_EMAIL password ADMIN_PASSWORD ? { email } // 认证成功后返回包含用户数据的对象 : null; }, cookiePassword: process.env.COOKIE_PASSWORD ?? makesurepasswordissecure, });要点authenticate返回对象表示认证成功该对象会被写入会话可作为当前登录用户信息返回null表示失败cookiePassword用于加密会话 cookie务必从环境变量读取且在生产环境使用足够强的随机字符串切勿沿用示例中的默认值示例中的邮箱/密码仅用于演示真实项目应改为查库校验例如结合密码哈希比对。Hapi在 adminOptions 中追加 auth 配置Beforeconst adminOptions { databases: [orm], };Afterconst ADMIN_EMAIL exampletest.com; const ADMIN_PASSWORD password; const adminOptions { databases: [orm], auth: { authenticate: async (email, password) { /* 在这里编写校验邮箱与密码的逻辑 */ return email ADMIN_EMAIL password ADMIN_PASSWORD ? { email } // 认证成功后返回包含用户数据的对象 : null; }, strategy: session, cookiePassword: process.env.COOKIE_PASSWORD ?? makesurepasswordissecure, isSecure: false, // 仅允许 https 请求时设为 true }, };要点strategy: session表示使用基于会话session的认证策略配合hapi/cookie工作isSecure: false表示允许通过非 HTTPS 访问本地开发常用如果站点部署在 HTTPS 之后应设为true否则浏览器可能拒绝携带 cookie。六、验证与进一步定制验证接入是否成功按上述任一方案完成初始化并启动服务器后可以这样验证浏览器访问http://localhost:{PORT}/admin侧边栏应出现你传入entities的全部实体如User、Car、Seller对每个实体尝试新建、编辑、删除一条记录确认 CRUD 读写的是 MikroORM 所连接的数据库若已开启认证未登录访问应被重定向到登录页。从当前仓库结构看tests/entities 中提供了Author、Book、Publisher等现成实体定义tests/features 下有各类功能的测试示例可在本地实验中参考其实体写法。进一步定制AdminJS 面板的深度定制自定义页面、属性标签、action 按钮、表单组件等属于 AdminJS 框架本身的能力请参阅 AdminJS 官方文档需要更丰富的资源行为时可以通过adminjs/mikroorm的Resource对实体资源做细粒度配置若项目使用 NestJS可参考仓库 usage-with-nestjs 的依赖注入思路把已初始化的 ORM 实例注入到 AdminJS 初始化逻辑中。生产环境注意事项凭据安全DATABASE_URL、COOKIE_PASSWORD等一律通过环境变量注入参考文档示例中的process.env写法会话保护cookiePassword必须使用强随机值Hapi 侧视部署环境设置isSecure只读需求若管理面板面向内部运营且只允许查看可在 AdminJS 资源上禁用部分 action如 delete避免误删数据并发模型AdminJS 面板对实体的读写经由 MikroORM 的EntityManager完成涉及请求上下文RequestContext的场景可参考仓库 RequestContext 相关实现 与 unit-of-work 文档 理解其事务与上下文行为。七、参考资料本文对应的版本文档version-7.2 的 usage-with-adminjs未版本化的最新版见 docs/usage-with-adminjs.mdMikroORM 初始化实现packages/core/src/MikroORM.ts连接参数定义packages/core/src/utils/Configuration.ts官方为 MikroORM 提供的 AdminJS 适配器示例应用位于adminjs/mikroorm包的example-app目录可将其 clone 到本地对照运行。赞分享后端【免费下载链接】mikro-ormTypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases.项目地址https://gitcode.com/gh_mirrors/mi/mikro-orm点击查看免费下载相关推荐在 MikroORM 项目中使用 AdminJS安装、接入与认证配置完整指南在 MikroORM 项目中使用 AdminJS安装、接入与认证配置完整指南 导读 本文基于 MikroORM 官方文档 usage with adminj后端在 MikroORM 7.x 中集成 AdminJS从安装到认证授权的完整实战指南在 MikroORM 7.x 中集成 AdminJS从安装到认证授权的完整实战指南 本指南以 MikroORM 7.1 官方文档 docs/versione后端在 React Router FrameworkRemix v3中集成 react-admin子路由挂载、basename 配置与 Supabase API 代理实战在 React Router FrameworkRemix v3中集成 react admin子路由挂载、basename 配置与 Supabase AP前端UI组件上一篇2025 Blender新特性全解析革命性建模工具与AI集成指南下一篇Certbot革命性特性解析ACME协议客户端如何彻底改变SSL证书管理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考