Node Route.get()需要回调函数但得到一个[对象未定义]

时间:2014-10-21 02:50:53

标签: node.js coffeescript

我正在使用Passport创建Google OAuth2身份验证系统。我正在尝试用Coffeescript编写路径文件,除了某些原因我不断收到此错误:

D:\Programming\weebly-site\node_modules\express\lib\router\route.js:162
            throw new Error(msg);
                  ^
    Error: Route.get() requires callback functions but got a [object Undefined]
      at D:\Programming\weebly-site\node_modules\express\lib\router\route.js:162:15
      at Array.forEach (native)
      at Route.(anonymous function) [as get] (D:\Programming\weebly-site\node_module
    s\express\lib\router\route.js:158:15)
      at Function.proto.(anonymous function) [as get] (D:\Programming\weebly-site\no
    de_modules\express\lib\router\index.js:490:19)
      at Object.<anonymous> (D:\Programming\weebly-site\routes\admin.js:15:10)
      at Object.<anonymous> (D:\Programming\weebly-site\routes\admin.js:37:4)
      at Module._compile (module.js:456:26)
      at Object.Module._extensions..js (module.js:474:10)
      at Module.load (module.js:356:32)
      at Function.Module._load (module.js:312:12)
      at Module.require (module.js:364:17)
      at require (module.js:380:17)
      at Object.<anonymous> (D:\Programming\weebly-site\app.js:16:19)
      at Module._compile (module.js:456:26)
      at Object.Module._extensions..js (module.js:474:10)
      at Module.load (module.js:356:32)
      at Function.Module._load (module.js:312:12)
      at Module.require (module.js:364:17)
      at require (module.js:380:17)
      at Object.<anonymous> (D:\Programming\weebly-site\bin\www:3:11)
      at Module._compile (module.js:456:26)
      at Object.Module._extensions..js (module.js:474:10)
      at Module.load (module.js:356:32)
      at Function.Module._load (module.js:312:12)
      at Function.Module.runMain (module.js:497:10)
      at startup (node.js:119:16)
      at node.js:906:3

我看了看咖啡文件,我无法发现错误。任何人都可以帮助我吗?

Coffeescript档案:

express = require('express')
passport = require('../config/passport.js')
router = express.Router()

router.get '/', (req, res) ->
    res.render 'admin/admin_index.jade'

router.get '/editor', isLoggedIn, (req, res) ->
    res.render 'admin/admin_editor.jade'

router.get '/auth/google', passport.authenticate('google', {scope:['profile', 'email']})

router.get '/auth/google/callback', passport.authenticate('google', {successRedirect: '/editor', failureRedirect: '/'})

isLoggedIn = (req, res, next) ->
    return next() if req.isAuthenticated()

    res.redirect '/'


module.exports = router

编译的JS文件:

// Generated by CoffeeScript 1.8.0
(function() {
  var express, isLoggedIn, passport, router;

  express = require('express');

  passport = require('../config/passport.js');

  router = express.Router();

  router.get('/', function(req, res) {
    return res.render('admin/admin_index.jade');
  });

  router.get('/editor', isLoggedIn, function(req, res) {
    return res.render('admin/admin_editor.jade');
  });

  router.get('/auth/google', passport.authenticate('google', {
    scope: ['profile', 'email']
  }));

  router.get('/auth/google/callback', passport.authenticate('google', {
    successRedirect: '/editor',
    failureRedirect: '/'
  }));

  isLoggedIn = function(req, res, next) {
    if (req.isAuthenticated()) {
      return next();
    }
    return res.redirect('/');
  };

  module.exports = router;

}).call(this);

1 个答案:

答案 0 :(得分:5)

在使用之前你没有设置isLoggedIn,因此在那时它仍未定义。

移动它:

isLoggedIn = function(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  return res.redirect('/');
};

在此之前:

router.get('/editor', isLoggedIn, function(req, res) {

或者删除isLoggedIn变量并使用function isLoggedIn() {}语法将函数悬挂起来:

function isLoggedIn(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  }
  return res.redirect('/');
};