sql >> Database teknologi >  >> NoSQL >> MongoDB

Oprettelse af et administrationsområde på fem minutter med AdminBro, express, mongoDB, mongoose

Der er en måde at konfigurere et administratorområde og begynde at arbejde med dine data på fem minutter uden egentlig at bygge alle administratorruter og controllere. Her er hvordan...

Det eneste, vi skal have, er modeller, og så kan vi bruge AdminBro-pakken til at køre det fuldt fungerende dashboard baseret på intet andet end vores modeller.

Først skal vi konfigurere ekspresserveren.

mkdir server 
cd server 
npm init

Lad os installere ekspres- og Admin Bro-pakker:

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

Nu skal vi lave en mappe til modellerne

mkdir models

Og filer til modellerne, lad os sige, at vi laver en model for produkterne og kategorierne

touch models/products.js models/categories.js

Lad os definere et skema for produktet i 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);

og for kategorierne inde i 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);

Lad os nu lave hovedserverfilen index.js inde i vores server folder:

touch index.js

og tilføje denne grundlæggende barebone-kode til den:

// 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} 🚀`));

Nu kan vi køre vores server med nodemon og se, at den er oppe og køre, forbundet til den lokale mongo-database.

Nu er det sidste trin - vi skal importere vores modeller, og Admin Bro vil klare resten.

Tilføj dette til din index.js fil efter tilslutning til db:

// 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

Som du kan se efter import af Admin Bro kræver vi vores modeller:

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

og derefter sende dem (Categories og Products ) i dette eksempel til Admin Bro):

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

plus at sætte stien til dashboardet i rootPath: '/admin'

Hvis vi nu vil åbne vores server på den udpegede port (5050 i dette eksempel) og gå til admin url (/admin ) i dette eksempel vil vi se det herlige dashboard klar til at blive brugt med vores data.

Demo-repo på GitHub


  1. MongoDB:Kan ikke kanonisere forespørgsel:BadValue Projection kan ikke have en blanding af inklusion og ekskludering

  2. Konverter DBObject til en POJO ved hjælp af MongoDB Java Driver

  3. Hvordan kan jeg kombinere flere samlinger til én samling ved hjælp af $lookup mongodb eller nodejs mongodb?

  4. DigitalOcean pod har ubundne øjeblikkelige PersistentVolumeClaims