Auto-generated Admin Panels for Node.js with AdminBro

When working on the backend we often need to check if the data that we are handling are being properly saved in the backend. In these scenarios, we have to open up a database query tool or mock the API via Postman or Swagger. Which isn’t the most convenient thing to do.

Or maybe you are building some application that requires simple crud operation (e-commerce is a great example). You have to build a separate admin panel for basic CRUD operation which doesn’t worth it.

Today we will see how we can have our admin panel within minutes without writing any front-end code.

What’s the Solution?

Frameworks like Django offer this type of solution out of the box. However, for NodeJS we don’t have anything official but as I was searching for some alternative I stumbled upon AdminBro.

You can create a full-fledged admin panel without any boilerplate. Some of the features are

  • CRUD Operation (That’s obvious!)

  • Authentication

  • Navigation

  • Validation

  • Role setup

And much more!

Today we will build a simple demo application with NestJS and for ORM we will use TypeORM along with any Relational database of your choice.

Pre-requisites

To follow along I assume you have the basic working knowledge of

  • Setup template backend project with NodeJS

  • Connect to Database for query

Step 1. Bootstrap a Project with NestJS

To bootstrap a NestJS project you have to install nestjs/cli globally

npm i -g @nestjs/cli

Then run the following command to bootstrap your project

nest new project-name

It’s similar to what we do with tools like express-generator in ExpressJS

Step 2. Install Required Dependencies

First, install the required dependencies for admin-bro.

yarn add admin-bro

Then install the official NestJS plugin to work in junction with admin-bro

yarn add @admin-bro/nestjs

If you work with express under the hood of NestJS then you need to install some additional dependencies.

yarn add express express-formidable @admin-bro/express

Install TypeORM module for admin-bro

yarn add @admin-bro/typeorm

Step 3. Model Your Entities Properly

In order to work with admin-bro, your entities should extend from BaseEntity imported from TypeORM .

import { Entity, Column, BaseEntity } from 'typeorm';

@Entity({ name: 'USER' })
export class UserEntity extends BaseEntity {

    @Column()
    name: string;

    @Column()
    address: string;

}

Step 4. Initialise on Startup

Create a new file named setup-admin.ts and add the following code.

import { INestApplication } from '@nestjs/common';
import { Database, Resource } from '@admin-bro/typeorm';
import AdminBro from 'admin-bro';
import * as AdminBroExpress from '@admin-bro/express';
import { validate } from 'class-validator';   //if you are using class-validator

import { User } from '../domains/user-management/user/entities/User';

export async function setupAdminPanel(app: INestApplication): Promise<void> {
    
    Resource.validate = validate;   //if you are using class-validator
    AdminBro.registerAdapter({ Database, Resource });
    
    const adminBro = new AdminBro({
        resources: [User],   // add other entities here
        rootPath: '/admin'
    });
    
    const router = AdminBroExpress.buildRouter(adminBro);
    
    app.use(adminBro.options.rootPath, router);
    
}

Add your Entities inside the resources array.

And call the function in your main.ts file

await setupAdminPanel(app);

And you are all done. Now go to your browser and open http://localhost:3000/admin

admin-bro

So now you can start adding or viewing your documents from the sidebar.

I hope you enjoyed this introduction.

That’s it. Have a Great Day! :D

Have something to say?

Get in touch with me via LinkedIn


Share this post


Read more articles...

team

Dockerizing a basic Node.js/Nest.js application

team

Request Validation in ExpressJS

team

Google Authentication with React

team

11 Ways to Improve Your Technical Resume

team

Applying the Liskov Substitution Principle in React

Profile Image

Who I am

Hi, I amMohammad Faisal, A full-stack software engineer @Cruise , working remotely from a small but beautiful country named Bangladesh.

I am most experienced inReactJS,NodeJS andAWS

Buy Me a Coffee Widget