繁体   English   中英

节点JS路由行为没有任何意义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM