motleydev
motleydev

Reputation: 3447

Array of objects for dynamic routing in Express JS

I have an array of objects to define my routes and when I iterate over the object, my / route has no problem but any of the subsequent routes return a 404. They all point to the same index route for the sake of troubleshooting.

Here's the code:

/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , http = require('http')
  , path = require('path');

var app = express();

var pagesArray = [
    {
      name: '/',
      route: routes.index
    },
    {
      name: 'about',
      route: routes.index
    },
    {
      name: 'contact',
      route: routes.index
    },
    {
      name: 'commentary',
      route: routes.index
    },
    {
      name: 'scratch',
      route: routes.index
    }

    ];

app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

//app.get('/', routes.index);

pagesArray.forEach(function(pageObj){
  app.get(pageObj.name, pageObj.route);
  console.log("Name: "+pageObj.name+", Route: "+pageObj.route);
});

http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

Upvotes: 2

Views: 2907

Answers (1)

user142162
user142162

Reputation:

A forward slash will be the starting character for any URL that is requested on your server. You need to modify your routes so there is a forward slash between each one:

var pagesArray = [
    {
      name: '/',
      route: routes.index
    },
    {
      name: '/about',
      route: routes.index
    },
    {
      name: '/contact',
      route: routes.index
    },
    {
      name: '/commentary',
      route: routes.index
    },
    {
      name: '/scratch',
      route: routes.index
    }

    ];

Upvotes: 2

Related Questions