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" 请求,但是你想告诉我什么,我完全不明白你的问题
我给 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" 请求,但是你想告诉我什么,我完全不明白你的问题