Khay
Khay

Reputation: 1570

Using Express Router in routes.js

I am currently using routes in app.js as below:

// Router configuration
var router = express.Router();

router.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

app.use('/api', router);

Is it possible to put Express router routes in another file like routes.js and call from app.js? I tried with app.get in routes.js and it is working. But it is annoying to add /api for prefix in all routes as below.

module.exports = function(app){
    app.get('/user', userController.getUser);
};

Or, is there anyway to use namespace in app.get too? Thank you

Upvotes: 0

Views: 186

Answers (2)

Ben Fortune
Ben Fortune

Reputation: 32137

Why not just do what you're doing, but in your route file?

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

router.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

module.exports = function(app) {
    app.use('/api', router);
};

Then you'd have in your app.js file

require('./routes.js')(app);

Routers support namespaces too, so you could even do

app.use('/', require('./routes.js'));

And in your routes file (this can be split across files for modularity)

var express = require('express');
var mainRouter = express.Router();
var userRouter = express.Router();

userRouter.route('/user')
    .get(userController.getUser)
    .post(userController.postUser);

mainRouter.use('/api', userRouter);

module.exports = mainRouter;

Upvotes: 2

You don't need to declare your routes in app.js, in fact, it's better to have each route in its own file, so you can write a routes/my_route.js file as:

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

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

module.exports = router;

Then in app.js:

var express = require("express");
var myRoute = require("./routes/my_route");
var app = express();
app.use("/my-route", myRoute);

Upvotes: 1

Related Questions