Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error: Route.get() , can't seem to get past

Keep getting this error, whilst trying to run my app. Low level of knowledge have tried many solutions online to fix this, but nothing has got me up and running. Here is the Error-

    Error: Route.get() requires a callback function but got a [object Undefined]
    at Route.(anonymous function) [as get] (d:\dev_portal\bit_racer_real\alpha_bit_racer\node_modules\express\lib\router\route.js:202:15)

index.js

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


    router.get('/', function(req, res) {
    res.redirect('/catalog');
    });

    module.exports = router;

catalog.js

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

 // Require controller modules.

var horse_controller = require('../controllers/horseController');

router.get('/', horse_controller.index);


module.exports = router;

app.js

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var catalogRouter = require('./routes/catalog'); 

var app = express();

var mongoose = require('mongoose');
var mongoDB = 'mongodb://admin:[email protected]:23753/alpha_bit_racer';
mongoose.connect(mongoDB);
mongoose.Promise = global.Promise;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));


app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/catalog', catalogRouter);





module.exports = app;

Not exactly sure where I have gone wrong, I have also heard that I may have a call in my routes index.js file in express. The call doesn't exist. I have spent hours going over the code making small changes, trying to get this simple error to clear :(

Has anyone else experienced this problem. Id love to get a clear answer.

like image 439
Travis Cunningham Avatar asked Feb 04 '26 17:02

Travis Cunningham


1 Answers

as far as I can see, your index.js file is in the horsecontroller directory.

But when you use CommonJS's require with a directory instead of a file, it automatically defaults that to ../path/to/directory/index.js, so you don't have to specify horse_controller.index in the app.get function, instead just specify horse_controller.

The final code would look like this:

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

 // Require controller modules.

var horse_controller = require('../controllers/horseController');

router.get('/', horse_controller);


module.exports = router;
like image 162
Daksh Miglani Avatar answered Feb 06 '26 06:02

Daksh Miglani