Plugin that allows you to add AdminJS to Express.js applications.
Installation
npm install @adminjs/express
It has 2 peerDependencies: express-formidable
and express
,
so you have to install them as well (if they are not installed already)
npm install express express-formidable
Usage
const AdminJSExpress = require('@adminjs/express')
It exposes 2 methods that create an Express Router, which can be attached
to a given url in the API. Each method takes a pre-configured instance of AdminJS.
- AdminJSExpress.buildRouter(admin, [predefinedRouter])
- AdminJSExpress.buildAuthenticatedRouter(admin, auth, [predefinedRouter], sessionOptions)
If you want to use a router you have already created - not a problem. Just pass it
as a predefinedRouter
parameter.
You may want to use this option when you want to include
some custom auth middleware for you AdminJS routes.
Example without an authentication
const AdminJS = require('adminjs')
const AdminJSExpress = require('@adminjs/express')
const express = require('express')
const app = express()
const adminJs = new AdminJS({
databases: [],
rootPath: '/admin',
})
const router = AdminJSExpress.buildRouter(adminJs)
app.use(adminJs.options.rootPath, router)
app.listen(8080, () => console.log('AdminJS is running under localhost:8080/admin'))
Using build in authentication
To protect the routes with a session authentication, you can use predefined
module:@adminjs/express.buildAuthenticatedRouter method.
Note! To use authentication in production environment, there is a need to configure
express-session for production build. It can be achieved by passing options to
sessionOptions
parameter. Read more on express/session Github page
Adding custom authentication
You can add your custom authentication setup by firstly creating the router and then
passing it via the predefinedRouter
option.
let router = express.Router()
router.use((req, res, next) => {
if (req.session && req.session.admin) {
req.session.adminUser = req.session.admin
next()
} else {
res.redirect(adminJs.options.loginPath)
}
})
router = AdminJSExpress.buildRouter(adminJs, router)
Where req.session.admin
is AdminJS#CurrentAdmin,
meaning that it should have at least an email property.