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

render() - how it loads controllers?

我给 401 授权访问 header

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() 并且登录表单像往常一样是处理程序。怎么可能?

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

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

然后查看日志以获取有关触发的内容以及您尝试查看的变量的信息。

您可能需要重定向而不是在 401 相关代码中呈现。

res.redirect('/login');

(已编辑)

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