Search code examples
node.jsexpresscallbacknode-asyncnode-request

Node Error: Route.get() requires callback functions but got a [object Undefined]


I have not found a question with a similar setup... how do I fix this?

I'm using node, express routing, request to call a token from an api, and async series to keep everything clean. I simplified the code by only showing one function in the async series.

routes.js

var express = require('express')
var router = express.Router()
var isAuthenticated = require("./passportAuth.js")
var tokens = require('./tokens')

module.exports = function() {
  router.get('/allTokens', isAuthenticated, tokens())
  return router
}

./tokens.js

var request = require("request")
var async = require('async')

module.exports = function(req, res, next) {

  var allTokens = function(callback) {
    request('url', function(err, res, body) {
      if(err) return callback(err, null)
      return callback(null, 'success')
    })
  }

  var asyncFinally = function(err, results) {
    if(err) return next(err)
    res.send(results)
  }

  async.series([allTokens], asyncFinally)
}

Error message

Route.get() requires callback functions but got a [object Undefined]

Solution

  • The router is expecting a function value but you are passing in an invoked function tokens(). Try just tokens.