0

I have a node/express server

//I'm using these
var express = require('express');
var router = express.Router();

I'm trying to do this:

applyRouter = function(rget){
    rget('/something', function(req,res,next){
        console.log("anything");
    });
}
applyRouter(router.get);

And I get this error

path/to/express/lib/router/index.js:509
    var route = this.route(path)
                    ^

TypeError: Cannot read property 'route' of undefined

Well OK, here's line 509

// create Router#VERB functions
methods.concat('all').forEach(function(method){
  proto[method] = function(path){
    var route = this.route(path)
    route[method].apply(route, slice.call(arguments, 1));
    return this;
  };
});

What does this refer to here?

I tried

var outerThis = this;
applyRouter = function(rget){
    console.log("inside", this);
    rget.apply(outerThis, ['/something', function(req,res,next){
        console.log("anything");
    }]);
}
applyRouter(router.get);

and

console.log("outside", this); //gives {}
applyRouter = function(rget){
    console.log("inside", this);
    rget.apply({}, ['/something', function(req,res,next){
        console.log("anything");
    }]);
}
applyRouter(router.get);

Same error... what's going on? Why can't I do this?

I can do

applyRouter = function(router){
    router.get('/something', function(req,res,next){
        console.log("anything");
    });
}
applyRouter(router);

So I'm setting this wrongly. What does router expect this to be? Where specifically does this get changed?

quietContest
  • 338
  • 1
  • 3
  • 11

0 Answers0