lilpomm
lilpomm

Reputation: 101

Node.js 404 when retrieving subroutes

I am trying to make a node.js site that has multiple routers. The issue I am having is that the url localhost:3000/forms/createForm returns a 404 not found error. I'm pretty new to node so i am not 100% sure what to search for. I am also new to Stack overflow so if I have missed anything let me know :)

Note: my routers have been registered in my app.js file.

project structure:

app
|-routes
|    |-index.js
|    |-forms.js
|-views
     |-layout
     |-forms
         |-index.hbs
         |-createForm.hbs 

Here is my forms.js:

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

/* GET home page. */
router.get('/', function(req, res, next) {
    res.render('forms/index', { title: 'Forms' });
});

router.get('/createForm', function(req, res) {
    res.render('forms/createForm', { title: 'Create Form' })
});

module.exports = router;

And here is the server activity:

GET /forms/ 200 1.461 ms - 2480
GET /stylesheets/lightTheme.css 304 0.443 ms - -
GET /forms/createForm 404 5.085 ms - 4039
GET /stylesheets/lightTheme.css 304 0.508 ms - -

App.js:

var formsRouter = require('./routes/forms');
...
app.use('/forms', formsRouter);

Upvotes: 2

Views: 55

Answers (1)

Antoine Boisier-Michaud
Antoine Boisier-Michaud

Reputation: 1665

You registered the /createForm route, not /forms/createForm. Also, you only have one router. If you wanted to use multiple routers, you could do:

var express = require('express');

var mongoose = require('mongoose');

var formsRouter = express.Router();
formsRouter.get('/createForm', function(req, res) {
    res.render('forms/createForm', { title: 'Create Form' })
});

var router = express.Router();
router.get('/', function(req, res, next) {
    res.render('forms/index', { title: 'Forms' });
});

router.use('/forms', formsRouter);

module.exports = router;

Upvotes: 1

Related Questions