This example shows you how to implement a smart action to upload a JSON file.
Here an activities model has a details field of the type JSON. This field should contain information from a JSON file.
Requirements
An admin backend running on forest-express-sequelize
How it works
Directory: /models
This directory contains the activities.js file where the activities model is declared.
This directory contains the activities.js file where the logic of the smart action is implemented.
activities.js
constexpress=require('express');const { activities } =require('../models');constrouter=express.Router();router.post('/actions/upload-json', (request, response) => {const [activityId] =newRecordsGetter(activities,req.user,req.query).getIdsFromRequest(request); // Get the raw base64 file => if your field is a string and you want to insert the JSON as a base64 to use the file viewer, this is the value you want to save in the database
constrawFile=req.body.data.attributes.values.json;// Trim the base64 string to delete the prefixconstrawFileCleaned=rawFile.replace('data:application/json;base64','');// Get json as string from base64 stringconststringFile=Buffer.from(rawFileCleaned,'base64').toString('utf8');// Check that you can properly parse json from the string obtainedlet jsonFiletry { jsonFile =JSON.parse(stringFile); } catch (error) {returnres.status(400).send({ error:'not a correctly formatted json file' }); }// Find and update the current record's details field with the json file as a stringreturnactivities.update({ details: jsonFile },{ where: { id: activityId, }, }).then(() => {returnres.send({ success:'record updated!' }); }).catch((e) => {console.error(e);returnres.status(400).send({ error:'could not update file' }); });});module.exports= router;