节点错误:Route.get()需要回调函数但得到[对象未定义]

时间:2016-07-07 05:07:40

标签: node.js express callback node-async node-request

我没有找到类似设置的问题......我该如何解决这个问题?

我使用节点,快速路由,请求从api调用令牌,以及异步系列以保持一切清洁。我通过仅在异步系列中显示一个函数来简化代码。

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)
}

错误消息

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

2 个答案:

答案 0 :(得分:0)

路由器期望一个函数值,但是你传入一个被调用的函数tokens()。试试令牌。

答案 1 :(得分:0)

您过早地调用tokens()函数而不是仅仅传递对它的引用。改变这个:

router.get('/allTokens', isAuthenticated, tokens())

到此:

router.get('/allTokens', isAuthenticated, tokens)

请记住,任何时候将()放在一个函数名后面,这意味着现在(立即)调用它。只要您自己传递函数名称,它就会传递对函数的引用,该函数可以在适当的时间稍后调用(这就是您想要的)。这是一个非常常见的错误。

由于调用tokens()会返回undefined,这就是您最终传递给router.get()的原因,以及您收到特定错误消息的原因。