【问题标题】:Route.js multiple route files and unable to use additional function in the router get/post functionRoute.js 多个路由文件,无法在路由器获取/发布功能中使用附加功能
【发布时间】:2016-04-29 11:22:24
【问题描述】:

我已设法将 Route.js 分解为多个控制器,但我不知道为什么我不能使用附加功能来阻止查看页面的权限。

    // route.js
    module.exports = function(app, passport) {

        app.use('/profile', require('./controllers/profileController'));

    }

.

    // profileController.js
    var express     = require('express')
        , router      = express.Router()
        , permissions = require('../utils/permissions.js')

    // =====================================
    // /profile
    // =====================================
    router.get('/', function(req, res) {
        res.render('Profile/index.ejs', {});
    }

    module.exports = router;

为什么我不能在 profileController 中执行此操作?

    router.get('/', permissions.isLoggedIn, function(req, res) {
        res.render('Profile/index.ejs', {});
    }

它抛出错误:

    Error: Route.get() requires callback functions but got a [object Undefined]
            at /home/ubuntu/workspace/node_modules/express/lib/router/route.js:171:15
            at Array.forEach (native)
            at Route.(anonymous function) [as get] (/home/ubuntu/workspace/node_modules/express/lib/router/route.js:167:15)
            at Function.proto.(anonymous function) [as get] (/home/ubuntu/workspace/node_modules/express/lib/router/index.js:380:19)
            at Object.<anonymous> (/home/ubuntu/workspace/app/controllers/profileController.js:10:10)
            at Module._compile (module.js:409:26)
            at Object.Module._extensions..js (module.js:416:10)
            at Module.load (module.js:343:32)
            at Function.Module._load (module.js:300:12)
            at Module.require (module.js:353:17)
            at require (internal/module.js:12:17)

附加信息:

    // permissions.js
    var helpers  = require('./helpers.js');

    // route middleware to make sure a user is logged in
    function isLoggedInAJAX(req, res, next) {

        // if user is authenticated in the session, carry on 
        if (req.isAuthenticated())
            return next();

        res.json(helpers.shootMessage(helpers.getNOK(), "You're not logged in!"));
    }

    // route middleware to make sure a user is logged in
    function isLoggedIn(req, res, next) {

        // if user is authenticated in the session, carry on 
        if (req.isAuthenticated())
            return next();

        //save the page
        req.session.returnTo = req.path;

        // if they aren't redirect them to the home page
        //res.redirect('/info');
        res.redirect('/auth/facebook');
    }

【问题讨论】:

  • 你能发布你的整个 permissions.js 文件吗?
  • 好的,一分钟内完成新编辑。完成。
  • 检查我的答案:P

标签: javascript node.js express routes


【解决方案1】:

你的问题是你没有在你的 permissions.js 中导出你的函数

// permissions.js
var helpers  = require('./helpers.js');

// route middleware to make sure a user is logged in
function isLoggedInAJAX(req, res, next) {

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated())
        return next();

    res.json(helpers.shootMessage(helpers.getNOK(), "You're not logged in!"));
}

// route middleware to make sure a user is logged in
function isLoggedIn(req, res, next) {

    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated())
        return next();

    //save the page
    req.session.returnTo = req.path;

    // if they aren't redirect them to the home page
    //res.redirect('/info');
    res.redirect('/auth/facebook');
}

module.exports = {
     isLoggedInAJAX : isLoggedInAJAX,
     isLoggedIn : isLoggedIn
   }

【讨论】:

  • 谢谢!作为一个额外的问题:我需要导出它的唯一原因是因为它是一个回调函数,对吧?当这两个函数都在 profileController.js 上时,我不需要这样做。
  • 不,您需要导出它们,因为它们在不同的文件中:P
  • 正要编辑我的问题来回答我自己,你是绝对正确的。谢谢你的帮助:)
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-28
  • 2021-05-01
  • 2018-09-22
相关资源
最近更新 更多