Node.js: Centralize multiple routes into one route file

Viewed 696

I am trying to centralize all of my route file into a index file and place that index route file in my main app file. I am trying to follow this thread

I have added app.js file. And the routes/ folder below:

When i am trying to get any of the url as mentioned below, it's showing the 404 error.

app.js:

const indexRouter  = require('./routes/index');
app.use('/', indexRouter);

routes file:

-- index.js
-- author.js
-- book.js

index.js:

const express = require('express');
const router = express.Router();

// Get Home Page of The Web Application
router.get('/', function(req, res) {
  res.send('Library Home Page');
});

router.use('/author', require('./author').router);
router.use('/book', require('./book').router);

module.exports = router;

author.js:

const express = require('express');
const router = express.Router();

var AuthorController = require('../controllers/authorController');

router.get('/', AuthorController.authorList);

router.get('/:id', AuthorController.authorDetail);

router.get('/create', AuthorController.authorCreateForm);

module.exports = router;

book.js:

const express = require('express');
const router = express.Router();

var BookController = require('../controllers/bookController');

router.get('/', BookController.bookList);

router.get('/:id', BookController.bookDetail);

router.get('/create', BookController.bookCreateForm);

module.exports = router;

I want to access the url as follows:

Home:
/

Author:
/author/
/author/1
/author/create

Book:
/book/
/book/1
/book/create

1 Answers

module.exports = router is a default export so require('./author').router refers to an undefined property on the router, it should be:

router.use('/author', require('./author'));

And in your server entry:

app.use(indexRouter); // No `'/'` as first param
Related