You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					94 lines
				
				2.2 KiB
			
		
		
			
		
	
	
					94 lines
				
				2.2 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								Contains a list of all the routes used in AdminJS. They are grouped within 2 arrays:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- `assets`
							 | 
						||
| 
								 | 
							
								- `routes`
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It is used by supported HTTP frameworks to render AdminJS pages. You can also use it to write your
							 | 
						||
| 
								 | 
							
								own rendering logic.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### How it looks
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This is the structure of the Router - both `assets` and `routes`.
							 | 
						||
| 
								 | 
							
								 
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								  assets: [{
							 | 
						||
| 
								 | 
							
								    path: '/frontend/assets/app.min.js',
							 | 
						||
| 
								 | 
							
								    src: path.join(ASSETS_ROOT, 'scripts/app.min.js'),
							 | 
						||
| 
								 | 
							
								  }, ...],
							 | 
						||
| 
								 | 
							
								  routes: [{
							 | 
						||
| 
								 | 
							
								    method: 'GET',
							 | 
						||
| 
								 | 
							
								    path: '/resources/{resourceId}',
							 | 
						||
| 
								 | 
							
								    Controller: ResourcesController,
							 | 
						||
| 
								 | 
							
								    action: 'index',
							 | 
						||
| 
								 | 
							
								  }, ...]
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Create router with authentication logic
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								To create your router with authentication logic you have to:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								* write routes responsible for user authentication
							 | 
						||
| 
								 | 
							
								* iterate all `assets` and `routes` and handle them.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The following code is almost an identical copy from @adminjs/express plugin.js file. It shows you
							 | 
						||
| 
								 | 
							
								how you can assign all the routes to express framework.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```javascript
							 | 
						||
| 
								 | 
							
								const { Router } = require('adminjs')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const { routes, assets } = Router
							 | 
						||
| 
								 | 
							
								const router = new express.Router()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// here you can write your authentication logic
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								routes.forEach((route) => {
							 | 
						||
| 
								 | 
							
								  // we have to change routes defined in AdminJS from {recordId} to :recordId
							 | 
						||
| 
								 | 
							
								  const expressPath = route.path.replace(/{/g, ':').replace(/}/g, '')
							 | 
						||
| 
								 | 
							
								  
							 | 
						||
| 
								 | 
							
								  const handler = async (req, res, next) => {
							 | 
						||
| 
								 | 
							
								    try {
							 | 
						||
| 
								 | 
							
								      const currentAdmin = null // you can fetch admin from session, 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      const controller = new route.Controller({ admin }, currentAdmin)
							 | 
						||
| 
								 | 
							
								      const { params, query } = req
							 | 
						||
| 
								 | 
							
								      const method = req.method.toLowerCase()
							 | 
						||
| 
								 | 
							
								      const payload = {
							 | 
						||
| 
								 | 
							
								        ...(req.fields || {}),
							 | 
						||
| 
								 | 
							
								        ...(req.files || {}),
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      const html = await controller[route.action]({
							 | 
						||
| 
								 | 
							
								        ...req,
							 | 
						||
| 
								 | 
							
								        params,
							 | 
						||
| 
								 | 
							
								        query,
							 | 
						||
| 
								 | 
							
								        payload,
							 | 
						||
| 
								 | 
							
								        method,
							 | 
						||
| 
								 | 
							
								      }, res)
							 | 
						||
| 
								 | 
							
								      if (route.contentType) {
							 | 
						||
| 
								 | 
							
								        res.set({ 'Content-Type': route.contentType })
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								      if (html) {
							 | 
						||
| 
								 | 
							
								        res.send(html)
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    } catch (e) {
							 | 
						||
| 
								 | 
							
								      next(e)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (route.method === 'GET') {
							 | 
						||
| 
								 | 
							
								    router.get(expressPath, handler)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  if (route.method === 'POST') {
							 | 
						||
| 
								 | 
							
								    router.post(expressPath, handler)
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								assets.forEach((asset) => {
							 | 
						||
| 
								 | 
							
								  router.get(asset.path, async (req, res) => {
							 | 
						||
| 
								 | 
							
								    res.sendFile(path.resolve(asset.src))
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								```
							 |