render() - 如何加载控制器?

时间:2015-04-03 12:00:35

标签: node.js express pug

我用

给401 Uanthourised access头
module.exports = function() {

    return function(req, res, next) {

        if (!req.isAuthenticated()) {
            res.status(401);
            console.log('Unauthorized');

            res.render('login.html', { csrfToken: req.csrfToken() });

            return;
        }

        next();
    };
};

现在login.html是由完全不同的控制器处理的视图:

var passport = require('passport');
var config = require(__dirname + '/../lib/config');

module.exports = function (router) {

    router.get('/', function (req, res) {
        // Error flash messages
        var errorFlash = req.flash('error');
        if (errorFlash && errorFlash.length) {
            res.locals.error = errorFlash;
        }
        res.render('login.html', { csrfToken: req.csrfToken() });
    });

    router.post('/',
        passport.authenticate('local', {
            failureRedirect: '/login/',
            failureFlash: true
        }),
        function(req, res) {
            res.cookie(config.cookie.name, req.user.email, { signed: true, maxAge: 1234 });
            res.redirect('/');
        }
    );

};

我担心的是如何确定登录控制器的哪一部分启动? render('index.html')以某种方式挂钩到索引控制器中的router.post(),并且登录表单像往常一样处理。怎么会这样?

2 个答案:

答案 0 :(得分:1)

如果您对调用哪个函数有任何疑问,那么一个好的方法是(临时)在该函数中添加console.log()。我经常会这样做:

console.log('filename.js - functionname() called with args: [%s] [%s]', arg1, arg2);

然后在日志中查看有关已发射的内容以及您要观看的变量的信息。

可能需要重定向而不是渲染401相关代码。

res.redirect('/login');

(编辑)的

答案 1 :(得分:0)

如果您没有提供任何方法,控制器将始终转到“索引”。 它是“POST”的原因可能是您尝试将表单发送到索引页面。 如果您只是请求索引页面。例如“(url)/ login / index”或只是“(url)/ login”那么它将是一个“GET”请求,但是你想告诉我什么,我完全不理解你的问题