Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to split Node.js files in several files

I have this code:

var express = require("express");
var app     = express();
var path    = require("path");

app.use(express.static(__dirname + '/public'));

app.get('/',function(req,res){
  res.sendFile(path.join(__dirname+'/views/index.html'));
  res.set('Access-Control-Allow-Origin', '*');
}).listen(3000);

console.log("Running at Port 3000");

app.get('/test', function(req, res) {
    res.json(200, {'test': 'it works!'})
})

I will have many services (like the test one), and I don't want to have them all on the same file.

I read in another question in Stack Overflow, that I can require other files like this: var express = require("./model/services.js"); And in that file write all the services, but it's throwing app is not defined when I start Node.

How can I separate codes?

like image 671
Pablo Avatar asked Dec 10 '22 19:12

Pablo


1 Answers

You can define your routes in different files say test-routes.js like this:

module.exports = function (app) {
    app.get('/test', function(req, res) {
        res.json(200, {'test': 'it works!'})
    })
}

Now in your main file say server.js you can import your route file like this:

var express = require("express");
var app     = express();
var path    = require("path");

app.use(express.static(__dirname + '/public'));

app.get('/',function(req,res){
  res.sendFile(path.join(__dirname+'/views/index.html'));
  res.set('Access-Control-Allow-Origin', '*');
}).listen(3000);

console.log("Running at Port 3000");

// import your routes
require('./test-routes.js')(app);
like image 123
Kunal Kapadia Avatar answered Dec 27 '22 03:12

Kunal Kapadia