[英]Node JS Route Behavior makes no sense
我正在尝试使用带有Express框架的Node创建一个简单的身份验证页面。
目前,我并不特别担心保护薄弱。
但是,我的路线文件显示异常行为。
这是代码:
var express = require('express');
var router = express.Router();
var admin = require("../controllers/admin");
router.get('/', function(req, res) {
console.log('Entered top route.');
if(req.body.isAuthenticated) {
res.redirect('admin/index');
} else {
res.redirect('admin/login');
}
});
router.post('/authenticate', function(req,res) {
if(req.body.pword == "key") {
console.log("Resetting body.isAuth'ed");
req.body.isAuthenticated = true;
console.log("New val: " + req.body.isAuthenticated);
res.redirect('admin/index');
} else {
console.log("Failed login attempt: " + req.body.pword);
res.redirect('admin/login');
}
});
router.get('/login', admin.login);
router.get('/index', admin.index);
module.exports = router;
这个想法是输入路线,我们在该路线上点击最上面的路线(由控制台正确记录)。 这根据是否设置了req变量进行重定向。 所有这些都正常运行,并且登录名(我正在使用玉器模板)正确呈现。 登录文件的格式为使用“ admin / authenticate”回调此路由文件。 这也可以正常工作。 我能够正确检索输入(通过控制台日志确认)。 但是,尽管我在/ authenticate /函数中执行的操作与我在上面的“ /”路由中执行的操作完全相同,但它们仍然失败。 我得到的404和Express Not Found打印输出完全没有用。
我的控制台正确记录了“失败的登录尝试”或“重置主体...新值:true”,但是随后执行与上面在router.get('/')方法中最初执行的完全相同的res.redirect失败,而该函数中的res.redirects正确地重定向并呈现正确的值。
任何想法可能有什么问题吗? 我可以将admin.login / admin.index方法发布在controllers / admin文件中。 但是,它们非常简单,我认为此错误源于对get和post方法之间的区别或某些东西(这是我第一次使用Node)的基本误解。
谢谢!
我认为问题是由于相对路径造成的。
从路径/
和路径/authenticate
执行res.redirect('admin/index')
是不一样的。
来自/authenticate
res.redirect('admin/index')
会将用户重定向到/authenticate/admin/index
,这就是为什么它提供404的原因。
尝试在身份验证回调res.rediret('admin/index')
更改为res.redirect('/admin/index')
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.