John Jerrby
John Jerrby

Reputation: 1703

Node app route is not working

Im fairly new to node JS and I've created the following 3 files and when save the application I got error

http.createServer(app).listen(**app.get('port')**, function(){

the error is undefined is not a function I use nodemon and I see the error in the terminal

I want to keep the structure of the files(to initiate the server from different file - server.js )since I want to use TDD .

this is the files

server.js

var http = require('http');

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

app.js

module.exports = function() {
    var express = require('express'),
        app = express();

    app.set('port', process.env.PORT || 3000);
    app.use(require('./controllers/requests'));
    return app;

}

requests.js

var routers = require('express')
    , router = express.Router()

router.get('/wild', function(req, res) {
    debugger;
    res.send('Wolf, Fox, Eagle')
})

module.exports = router

UPDATE This is the update in the code app.js

  module.exports = function() {
        var express = require('express'),
            app = express();

        app.set('port', process.env.PORT || 3000);
        app.use(function(){
            var routes = require('./controllers/requests') (app);
        });
        return app;

    }

requests.js **

module.exports = function (app) {
    var express = require('express')
        , router = express.Router();
    app.get('/wild', function(req, res) {
        res.send('Wolf, Fox, Eagle');
    })
}

server.js

var http = require('http');

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

Upvotes: 1

Views: 3581

Answers (1)

Andre989
Andre989

Reputation: 74

You should invoke the function returned by module containing app.

app = require('./app') ();

Moreover, in request.js file you should define routes on your app instance:

module.exports = function (app) {
   app.get('/wild', function(req, res) {
      res.send('Wolf, Fox, Eagle');
   })
}

And in app.js: app.use(function () {}) is used to define middlewares. Here you could call

var routes = require('./controllers/requests') (app);

EDIT

Please find here below the recap to answer your comments:

server.js

var http = require('http');
var app = require('./app') ();
http.createServer(app).listen(app.get('port'), function(err){
   console.log('Express server listening on port ' + app.get('port'));
});

app.js

module.exports = function() {
   var express = require('express'),
      app = express();

    app.set('port', process.env.PORT || 3000);
    require('./controllers/requests')(app);
    return app;
}

requests.js

module.exports = function (app) {
   app.get('/wild', function(req, res) {
      res.send('Wolf, Fox, Eagle')
 });
}

Hope this helps!

Upvotes: 2

Related Questions