fix: Resolve TypeError by correcting module dependency injection
This commit fixes a TypeError that occurred because the contactRoutes module was being initialized before the contactController module. The fix involves: - Swapping the initialization order in server.js so the contactController is initialized before contactRoutes. - Modifying contactRoutes.js to accept the initialized contactController as a dependency, rather than requiring it on its own.
This commit is contained in:
@@ -1,19 +1,22 @@
|
|||||||
const express = require('express');
|
// The entire module is now a function that accepts 'contactController' as an argument.
|
||||||
const router = express.Router();
|
module.exports = (contactController) => {
|
||||||
const rateLimit = require('express-rate-limit');
|
const express = require('express');
|
||||||
const { body, validationResult } = require('express-validator');
|
const router = express.Router();
|
||||||
const contactController = require('../controllers/contactController');
|
const rateLimit = require('express-rate-limit');
|
||||||
const { formSecurityCheck } = require('../middleware/securityMw');
|
const { body, validationResult } = require('express-validator');
|
||||||
|
// Remove the old require statement since we are getting the controller as an argument
|
||||||
|
// const contactController = require('../controllers/contactController');
|
||||||
|
const { formSecurityCheck } = require('../middleware/securityMw');
|
||||||
|
|
||||||
// 🛡️ Configure rate limiting to prevent DDoS and spamming
|
// 🛡️ Configure rate limiting to prevent DDoS and spamming
|
||||||
const apiLimiter = rateLimit({
|
const apiLimiter = rateLimit({
|
||||||
windowMs: 15 * 60 * 1000, // 15 minutes
|
windowMs: 15 * 60 * 1000, // 15 minutes
|
||||||
max: 5,
|
max: 5,
|
||||||
message: "Too many requests from this IP, please try again after 15 minutes."
|
message: "Too many requests from this IP, please try again after 15 minutes."
|
||||||
});
|
});
|
||||||
|
|
||||||
// Define the route for form submissions
|
// Define the route for form submissions
|
||||||
router.post('/submit-form',
|
router.post('/submit-form',
|
||||||
apiLimiter,
|
apiLimiter,
|
||||||
[
|
[
|
||||||
// express-validator: sanitation and validation
|
// express-validator: sanitation and validation
|
||||||
@@ -37,6 +40,8 @@ router.post('/submit-form',
|
|||||||
formSecurityCheck,
|
formSecurityCheck,
|
||||||
// The controller, which is the final step
|
// The controller, which is the final step
|
||||||
contactController.submitForm
|
contactController.submitForm
|
||||||
);
|
);
|
||||||
|
|
||||||
module.exports = router;
|
// Return the configured router
|
||||||
|
return router;
|
||||||
|
};
|
@@ -34,10 +34,11 @@ const transporter = nodemailer.createTransport({
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Import contactRoutes and contactController
|
|
||||||
const contactRoutes = require('./routes/contactRoutes');
|
|
||||||
const contactController = require('./controllers/contactController')(pool, transporter);
|
const contactController = require('./controllers/contactController')(pool, transporter);
|
||||||
|
|
||||||
|
// Import contactRoutes and contactController
|
||||||
|
const contactRoutes = require('./routes/contactRoutes')(contactController);
|
||||||
|
|
||||||
// Use contactRoutes to connect the modular router to the main app
|
// Use contactRoutes to connect the modular router to the main app
|
||||||
app.use(contactRoutes);
|
app.use(contactRoutes);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user