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

Node.js render()-如何加载控制器?,node.js,express,pug,Node.js,Express,Pug,我给401个用户访问标题 module.exports = function() { return function(req, res, next) { if (!req.isAuthenticated()) { res.status(401); console.log('Unauthorized'); res.render('login.html', { csrfToken: req.csrf

我给401个用户访问标题

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');

编辑

如果您未提供任何方法,控制器将始终转到索引。 这是一篇文章的原因可能是您正试图将表单发送到索引页。
如果您只是请求索引页。例如url/login/index或只是url/login,那么这将是一个GET请求,但你想说什么,我不完全理解你的问题

应该重定向到路由,而不是文件。原因是负号或没有发生。我认为负号是因为问题令人困惑。render'index.html'将返回一个可能位于views/index.html中的视图。您包含的第二个代码段处理到GET/和POST/路由的路由。为了回答您的问题,您上面没有显示的视图是应该与router.post“连接”什么。如果这不能澄清问题,请重新表述你的问题!