sql >> Base de Datos >  >> NoSQL >> MongoDB

Crear un área de administración en cinco minutos con AdminBro, express, mongoDB, mongoose

Hay una manera de configurar un área de administración y comenzar a trabajar con sus datos en cinco minutos sin tener que construir todas las rutas y controladores de administración. Así es como...

Todo lo que necesitamos tener son modelos y luego podemos usar el paquete AdminBro para ejecutar el tablero completamente funcional basado en nada más que nuestros modelos.

Primero necesitamos configurar el servidor express.

mkdir server 
cd server 
npm init

Instalemos los paquetes express y Admin Bro:

npm i @adminjs/express @adminjs/mongoose adminjs express mongoose            

Ahora necesitamos crear una carpeta para los modelos.

mkdir models

Y archivos para los modelos, digamos que haremos un modelo para los productos y categorías

touch models/products.js models/categories.js

Definamos el esquema para el producto en models/products.js :

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const productsSchema = new Schema({
  product: {
    type: String,
    required: true,
    unique: true
  },
  price: {
    type: Number,
    required: true
  },
  categoryId: {
    type: Schema.Types.ObjectId, ref: 'categories',
    required: true
  },
});

module.exports = mongoose.model('products', productsSchema);

y para las categorías dentro de models/categories.js :

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const categoriesSchema = new Schema({
    category: {
        type: String,
        required: true,
        unique: true
    }
},
{strictQuery: false}
)
module.exports =  mongoose.model('categories', categoriesSchema);

Ahora hagamos el archivo del servidor principal index.js dentro de nuestro server carpeta:

touch index.js

y agregue este código barebone básico en él:

// GENERAL CONFIG
const app = require('express')();
const port = process.env.PORT || 5050;

// CONNECTING TO DB
const mongoose = require('mongoose');
(async function () {
  try {
    await mongoose.connect('mongodb://127.0.0.1/ourDatabase');
    console.log('Your DB is running');
  } catch (error) {
    console.log('your DB is not running. Start it up!');
  }
})();

app.listen(port, () => console.log(`🚀 Server running on port ${port} 🚀`));

Ahora podemos ejecutar nuestro servidor con nodemon y verifique que esté en funcionamiento, conectado a la base de datos local de mongo.

Ahora el paso final:necesitamos importar nuestros modelos y el Admin Bro hará el resto.

Agregue esto a su index.js archivo después de conectarse a la base de datos:

// ADMIN BRO
const AdminJS = require('adminjs');
const AdminJSExpress = require('@adminjs/express')
// We have to tell AdminJS that we will manage mongoose resources with it
AdminJS.registerAdapter(require('@adminjs/mongoose'));
// Import all the project's models
const Categories = require('./models/categories'); // replace this for your model
const Products = require('./models/products'); // replace this for your model
// Pass configuration settings  and models to AdminJS
const adminJS = new AdminJS({
  resources: [Categories, Products],
  rootPath: '/admin'
});
// Build and use a router which will handle all AdminJS routes
const router = AdminJSExpress.buildRouter(adminJS);
app.use(adminJS.options.rootPath, router);
// END ADMIN BRO

Como puede ver después de importar Admin Bro, requerimos nuestros modelos:

const Categories = require('./models/categories'); // replace this for your model
const Products = require('./models/products'); // replace this for your model

y luego pasándolos (Categories y Products ) en este ejemplo en Admin Bro):

const adminJS = new AdminJS({
  resources: [Categories, Products],
  rootPath: '/admin'
});

además de establecer la ruta para el tablero en rootPath: '/admin'

Ahora, si abrimos nuestro servidor en el puerto designado (5050 en este ejemplo) e iremos a la URL de administración (/admin ) en este ejemplo veremos el glorioso tablero listo para ser usado con nuestros datos.

Repositorio de demostración en GitHub