节点JS路由行为毫无意义

时间:2014-11-06 09:42:22

标签: javascript node.js express

我尝试使用带有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 / function中采取的操作,即使它们与我在' /'中执行的操作完全相同。在上面的路线,失败。我得到404和Express Not Found打印输出完全没用。

我的控制台正确记录'登录失败尝试'或者'重置正文...新的val:true",但是然后执行完全相同的res.redirect,最初在router.get(' /')上面的方法中失败,而该函数中的res.redirects正确地重定向并呈现正确的值。

任何想法都可能出错?我可以在controllers / admin文件中发布admin.login / admin.index方法。但是,它们非常简单,我认为这个错误源于对get和post方法之间差异的基本误解(这是我第一次使用Node)。

谢谢!

1 个答案:

答案 0 :(得分:2)

我认为问题在于相对路径 从路径res.redirect('admin/index')和路径/执行/authenticate不一样。

来自res.redirect('admin/index')

/authenticate会将用户重定向到/authenticate/admin/index,这可能就是为什么它会给予404。

尝试在身份验证回调中将res.rediret('admin/index')更改为res.redirect('/admin/index')