Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to separate routes on Node.js and Express 4?

I want to separate Routes from my server.js file.

I am following this tutorial on Scotch.io http://scotch.io/tutorials/javascript/build-a-restful-api-using-node-and-express-4

It is working if all lines are on server.js file. But I am failing to separate. How can I make this work?

server.js

// set up ====================================================================== var express = require('express'); var app = express(); var bodyParser = require('body-parser');  // configuration =============================================================== app.use(bodyParser());  var port = process.env.PORT || 8000;  var mongoose = require('mongoose'); var database = require('./config/database'); mongoose.connect(database.url); var Video = require('./app/models/video');  // routes ======================================================================= app.use('/api', require('./app/routes/routes').router);  // listen (start app with node server.js) ====================================== app.listen(port); console.log("ready captain, on deck" + port);  module.exports = app; 

And the app/routes/routes.js

var express = require('express'); var router = express.Router();  router.use(function(req, res, next) {   console.log('Something is happening.');   next(); });  router.get('/', function(req, res) {   res.json({ message: 'hooray! welcome to our rest video api!' });   });   router.route('/videos')    .post(function(req, res) {      var video = new Video();     video.title = req.body.title;      video.save(function(err) {   if (err)     res.send(err);    res.json({ message: 'Video criado!' }); });     })    .get(function(req, res) {     Video.find(function(err, videos) {       if (err)         res.send(err);        res.json(videos);     });   });  module.exports.router = router; 
like image 369
yellowbuck Avatar asked May 28 '14 23:05

yellowbuck


People also ask

What is a route in NodeJS and Express?

Routing refers to how an application's endpoints (URIs) respond to client requests.

How can we create Chainable route handlers for a route path in Expressjs app?

Answer: A is the correct option. By using app. route() method, we can create chainable route handlers for a route path in Express.


2 Answers

Server.js

var express = require('express'); var app = express();  app.use(express.static('public'));  //Routes app.use(require('./routes'));  //http://127.0.0.1:8000/    http://127.0.0.1:8000/about  //app.use("/user",require('./routes'));  //http://127.0.0.1:8000/user  http://127.0.0.1:8000/user/about   var server = app.listen(8000, function () {    var host = server.address().address   var port = server.address().port    console.log("Example app listening at http://%s:%s", host, port)  }) 

routes.js

var express = require('express'); var router = express.Router();  //Middle ware that is specific to this router router.use(function timeLog(req, res, next) {   console.log('Time: ', Date.now());   next(); });   // Define the home page route router.get('/', function(req, res) {   res.send('home page'); });  // Define the about route router.get('/about', function(req, res) {   res.send('About us'); });   module.exports = router; 

*In routs.js you should define Middle ware

ref http://wiki.workassis.com/nodejs-express-separate-routes/

like image 74
Bikesh M Avatar answered Sep 28 '22 03:09

Bikesh M


As far as separating routes from main file is concerned..

Server.js

//include the routes file var routes = require('./routes/route'); var users = require('./routes/users'); var someapi = require('./routes/1/someapi');  //////// app.use('/', routes); app.use('/users', users); app.use('/1/someapi', someapi); 

routes/route.js

//last line - try this module.exports = router; 

Also for new project you can try on command line

express project_name 

You will need express-generator for that

like image 24
Kiran Pagar Avatar answered Sep 28 '22 03:09

Kiran Pagar