每次开发一个后端应用,基本上都要编写一个admin后台来管理(CRUD)各类资源,在Python生态中,Django和Flask框架都有对应的admin包,经过简单设置就能够拥有一个CRUD的admin后台。我也一直在寻找相似功能的NPM包,终于找到了AdminBro。因为目前AdminBro官网上的NestJS+AdminBro文档写得不是很清晰,因此写下这篇文章,记录下如何在NestJS应用中使用AdminBrogit
如下代码演示环境为:github
npm i admin-bro @admin-bro/nestjs @admin-bro/mongoose npm i express @admin-bro/express express-formidable npm i express-session
// comment.schema.ts import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose"; import { Document } from "mongoose"; @Schema() export class Comment extends Document { @Prop({ default: Date.now, }) created_at: Date; @Prop() user_id: string; @Prop() content: string; @Prop() liked_num: number; @Prop() client_name: string; @Prop() connect_key: string; } export const CommentSchema = SchemaFactory.createForClass(Comment);
// app.module.ts import { Module } from '@nestjs/common'; import AdminBro from 'admin-bro'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { Database, Resource } from '@admin-bro/mongoose'; import { Model } from 'mongoose'; import { getModelToken, MongooseModule } from '@nestjs/mongoose'; import { AdminModule } from '@admin-bro/nestjs'; import { Comment, CommentSchema } from '../comment/comment.schema'; AdminBro.registerAdapter({ Database, Resource }); @Module({ imports: [ MongooseModule.forRoot('mongodb://127.0.0.1/comment'), AdminModule.createAdminAsync({ useFactory: (commentModel: Model<Comment>) => { return { auth: { authenticate: async () => { // 认证逻辑 return Promise.resolve({ email: 'test' } }), cookieName: 'admin_panel', cookiePassword: 'xxx2arfa', }, adminBroOptions: { rootPath: '/admin', resources: [commentModel], }, }; }, inject: [getModelToken(Comment.name)], imports: [ MongooseModule.forFeature([ { name: Comment.name, schema: CommentSchema }, ]), ], }), ], controllers: [AppController], providers: [AppService], }) export class AppModule {}