user1429980
user1429980

Reputation: 7148

Jade URL Routing in Node Express

I am building a Node Express application using Jade, and I am confused about how to route my views to the specific requests the browser will make. I understand that in order to get URLs to work in the browser, we need to use Node's routes; however, from looking online, I have discovered that Express has its own router.

I used PHPStorm to start up my project, and the index.jade will load... but how do I load the others? Here is my existing code:

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

var app = express();

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(express.cookieParser('your secret here'));
    app.use(express.session());
    app.use(app.router);
    app.use(require('less-middleware')({ src:__dirname + '/public' }));
    app.use(express.static(path.join(__dirname, 'public')));
});

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

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

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

What is the most basic way to route my application, and where can I find more extensive documentation on this topic?

Thanks.

Upvotes: 2

Views: 7288

Answers (1)

Hector Correa
Hector Correa

Reputation: 26690

I understand that in order to get URLs to work in the browser, we need to use Node's routes; however, from looking online, I have discovered that Express has its own router.

Node.js per-se does not provide support for "routes", but Express does. You build your routes in Express using the following syntax:

app.[verb]('[url-path]', [handler]);

So your route app.get('/', routes.index) will process HTTP GET request to URL path / with the routes.index function. Express will automatically pass a request and response objects to your handler.

You can add more routes like this:

app.get('/users', routes.userList);
app.get('/user/:id', routes.userInfoView);
app.post('/user/:id', routes.userInfoSave);

You can find more information about this here http://expressjs.com/api.html#app.param

I am building a Node Express application using Jade, and I am confused about how to route my views to the specific requests the browser will make.

Once a route handler is invoked, say (routes.userList) you can call res.render() method inside userList to render the Jade file that you want. For example:

res.render('user_list', 
    { users: [{name: "user1", age: 10}, {name: "user2", age: 20}] });

See here for more information: http://expressjs.com/api.html#res.render

Upvotes: 2

Related Questions