I'm writing my backend in Node/Express, and I'm looking for a way to create some OOP inheritance with my Express controllers.
My structure looks like:
.
└── server
├── App.js
├── controllers
│ ├── articles.js
│ └── project.js
├── models
│ ├── articles.js
│ ├── projects.js
├── routes
│ ├── articles.js
│ ├── projects.js
└── views
├── error.ejs
├── index.ejs
└── layout.ejs
There are some tasks common to some controllers that can't be handled by middlewares. For this, I want to create a basic controller
class with some functions that will be shared by all controller instances.
Imagine that I have this routes:
// routes/project.js
router.put('/:id', upload.any(), putProject);
router.post('/:id', upload.any(), postProject);
And the controllers:
// controllers/project.js
export const putProject = function(req, res, next) {
var data = JSON.parse(req.body.data);
// Retrieving files appended by Multer to req.files
req.files.forEach((item) => {
data[item.fieldname] = '/' + item.path;
});
models.Projects.update(data, {
include: [{ model: models.ProjectImages }],
returning: true,
plain: true,
where: {
id: req.params.id,
},
});
// etc...
};
export const postProject = function(req, res, next) {
// Retrieving files appended by Multer to req.files
var data = JSON.parse(req.body.data);
req.files.forEach((item) => {
data[item.fieldname] = '/' + item.path;
});
models.Projects.create({
title: req.body.title,
description: req.body.description,
ArticleId: req.body.ArticleId,
})
// etc...
};
I would like both putProject
and postProject
extend a base clase that holds this logic:
var data = JSON.parse(req.body.data);
req.files.forEach((item) => {
data[item.fieldname] = '/' + item.path;
});
If someone has an idea about how this can be written I would be grateful!