Just_a_Beginner
Just_a_Beginner

Reputation: 3

How do I correctly import Express route modules?

I generated a project with express-generator. In my routes directory, i have 2 files : index.js and users.js, and about.js that handles the /about route.

Accessing /about results in Error 404 : Page Not found.

When adding the handler for /about in app.js, the error was gone.

./app.js:

var     createError = require('http-errors');
var     express = require('express');
var     path = require('path');
var     cookieParser = require('cookie-parser');
var     logger = require('morgan');

var     indexRouter = require('./routes/index')
var     aboutRouter = require('./routes/about');
var     usersRouter = require('./routes/users');

var     app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/about', aboutRouter);
app.use('/users', usersRouter);


// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});


// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development\
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

./route/index.js:

var express = require('express');
var app = express();
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
        res.json( {
                message : "Home Page (Requeste for list)",
                method : req.method,
                Succes : "True"
        });
  // res.render('index', { title: 'Express' });
})

module.exports = router;

./routes/about.js:

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

router.get('/about', function(req, res) {
    res.send('im the about page!');
});
router.post('/about', function(req, res) {
    res.send('im the about page!');
});


module.exports = router;

Upvotes: 0

Views: 1791

Answers (2)

dime2lo
dime2lo

Reputation: 836

What is happening is that in app.js you have set the root for about rout as "/about" and inside "about.js" you have specified router.get('/about') again, what will result in, for accessing the about route having to use /about/about (you may try before fix it). For you to get the result that you are expecting you should use router.get(´/´) inside about.js and in app.js keep as it is app.use('/about', aboutRouter);. You can have a look at https://expressjs.com/en/guide/routing.html for more information. Regards.

Upvotes: 1

Shams Nahid
Shams Nahid

Reputation: 6559

Rewrite your router/about.js like this

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

router.get('/', function(req, res) {
    res.send('im the about page!');
});
router.post('/', function(req, res) {
    res.send('im the about page!');
});


module.exports = router;

Since in your app.js, you already declare the prefix /about at line 24, so you do not have to do it again in router/about.js

Upvotes: 1

Related Questions