Overriding a route allows you to change or completely replace a Forest Admin's route behavior.
To achieve this, use existing snippets of default routes and modify them according to your needs.
Here are a few examples:
/routes/companies.jsconst express = require('express');const { PermissionMiddlewareCreator, RecordsGetter, RecordsCounter } = require('forest-express-sequelize');const { companies } = require('../models');const router = express.Router();const permissionMiddlewareCreator = new PermissionMiddlewareCreator('companies');//...// Get a list of Companies - Check out our documentation for more details: https://docs.forestadmin.com/documentation/reference-guide/routes/default-routes#get-a-list-of-recordsrouter.get('/companies', permissionMiddlewareCreator.list(), (request, response, next) => {const recordsGetter = new RecordsGetter(companies);const params = request.query;params.searchExtended = '1';recordsGetter.getAll(params).then(records => recordsGetter.serialize(records)).then(recordsSerialized => response.send(recordsSerialized)).catch(next);});// Get a number of Companies - Check out our documentation for more details: https://docs.forestadmin.com/documentation/reference-guide/routes/default-routes#get-a-list-of-recordsrouter.get('/companies/count', permissionMiddlewareCreator.list(), (request, response, next) => {const recordsCounter = new RecordsCounter(companies);const params = request.query;params.searchExtended = '1';recordsCounter.count(params).then(count => response.send({ count })).catch(next);});//...
With this snippet, only the companies
collection would use extended search by default.
Using extended search is less performant than default search. Use this wisely.
/routes/companies.jsrouter.delete('/companies/:recordId', permissionMiddlewareCreator.delete(), (request, response, next) => {if (request.params.recordId === 82) {response.status(403).send('This record is protected, you cannot remove it.');return;}const recordRemover = new RecordRemover(companies);recordRemover.remove(request.params.recordId).then(() => response.status(204).send()).catch(next);});
To achieve this, simply remove the next()
statement of any route:
/routes/companies.js...// Create a Action Approval - Check out our documentation for more details: https://docs.forestadmin.com/documentation/reference-guide/routes/default-routes#create-a-recordrouter.post('/companies', permissionMiddlewareCreator.create(), (req, res, next) => {// >> Add your own logic here <<});...
For instance, if you have a Users
collection, you might want to create your users via your own api:
/routes/users.js...const axios = require('axios');const { users } = require('../models');...router.post('/users', permissionMiddlewareCreator.create(), (request, response, next) => {const recordCreator = new RecordCreator(users);const data = request.body.data.attributes;axios({url: 'https://<your-api>/users',method: 'post',data: data,}).then(async (result) => {response.send(await recordCreator.serialize(result.data));}).catch((error) => {console.log('error:', error);});});