I have an app.js file built using NodeJS and ExpressJS, which calls a routes.js file for URL handling, and that in turn references a controller.js file which renders my templates/views. I had multiple routes working with CommonJS, but when I tried to convert it all to ES Modules, I’m having problems.
The following code works with a route file with a single route. But, I can’t get it to work with more than one route. It wants an export default
for the single route, which does work, or gives me this error if I try multiple routes in a single route.js file: Route.get() requires a callback function but got a [object Undefined]
. Maybe my syntax is off, maybe it’s something else.
This is my working code, but it breaks when I try to add multiple routes…
Here’s my app.js call to the routes file:
import shopRoutes from './routes/shop.js';
app.use(shopRoutes);
I’m calling the controller file from the routes file as such:
import express from 'express';
import * as shopController from '../controllers/shop.js';
const router = express.Router();
const shopIndex = router.get('/', shopController.getIndex);
// need to be able to use more routes like this, etc
// const shopIndex = router.get('/product', shopController.getProducts);
export default shopIndex;
And here’s the related controller file:
export const getIndex = (req, res, next) => {
res.render('shop/index', {
pageTitle: 'Shop',
path: '/',
});
};
// need to be able to use more functions for template assignment
// export const getProducts = (req, res, next) => {
// res.render('shop/product', {
// pageTitle: 'Product',
// path: '/product',
// });
// };
export default getIndex;
How can I have more than one route in the routes file, which would call multiple controller functions, using ES6 Modules? Any and all help appreciated.